Threads.hx 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. class Threads {
  2. static var WAIT = [];
  3. @:hlNative("std","thread_create") static function thread_create( f : Void -> Void ) : hl.Abstract<"hl_thread"> {
  4. return null;
  5. }
  6. static function run(i,k) {
  7. for( i in 0...Math.ceil(1000000/k) )
  8. new hl.Bytes(1);
  9. if( i>=0 ) WAIT[i] = false;
  10. }
  11. public static function main() {
  12. hl.Gc.enable(false); // disable major gc
  13. var flags = hl.Gc.flags;
  14. flags.set(NoThreads);
  15. hl.Gc.flags = flags;
  16. var t0 = Sys.time();
  17. run(-1,1);
  18. trace("Threads disable "+(Sys.time() - t0));
  19. flags.unset(NoThreads);
  20. hl.Gc.flags = flags;
  21. var t0 = Sys.time();
  22. run(-1,1);
  23. trace("Single thread "+(Sys.time() - t0));
  24. for( COUNT in [2,4,10] ) {
  25. for( i in 0...COUNT )
  26. WAIT[i] = true;
  27. t0 = Sys.time();
  28. for( i in 0...COUNT )
  29. thread_create(run.bind(i,COUNT));
  30. var i = 0;
  31. while( i < COUNT ) {
  32. if( WAIT[i] ) {
  33. i = 0;
  34. Sys.sleep(0);
  35. } else i++;
  36. }
  37. trace(COUNT+" threads "+(Sys.time() - t0));
  38. }
  39. }
  40. }