| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- class Threads {
- static var WAIT = [];
-
- @:hlNative("std","thread_create") static function thread_create( f : Void -> Void ) : hl.Abstract<"hl_thread"> {
- return null;
- }
- static function run(i,k) {
- for( i in 0...Math.ceil(1000000/k) )
- new hl.Bytes(1);
- if( i>=0 ) WAIT[i] = false;
- }
-
- public static function main() {
- hl.Gc.enable(false); // disable major gc
- var flags = hl.Gc.flags;
- flags.set(NoThreads);
- hl.Gc.flags = flags;
-
- var t0 = Sys.time();
- run(-1,1);
- trace("Threads disable "+(Sys.time() - t0));
-
- flags.unset(NoThreads);
- hl.Gc.flags = flags;
-
- var t0 = Sys.time();
- run(-1,1);
- trace("Single thread "+(Sys.time() - t0));
-
- for( COUNT in [2,4,10] ) {
- for( i in 0...COUNT )
- WAIT[i] = true;
- t0 = Sys.time();
- for( i in 0...COUNT )
- thread_create(run.bind(i,COUNT));
- var i = 0;
- while( i < COUNT ) {
- if( WAIT[i] ) {
- i = 0;
- Sys.sleep(0);
- } else i++;
- }
- trace(COUNT+" threads "+(Sys.time() - t0));
- }
- }
-
- }
|