想想我有做一些事情在主线程一个线程的代码,它需要大约10-20毫秒。 我想利用我的处理器两个核心和拆分任务两个线程住在不同的内核。 技术上我应该恢复两粒安眠药线程,让自己睡觉,直到他们完成并再次入睡。 没有吓唬如果任务是足够长的时间来执行。 但对于10-20毫秒我怀疑使用众所周知的同步技术将花费我很大份额的时间的惩罚。 如果我太可疑和Windows / CPU确实好工作让所有的睡眠/唤醒请求有效,那么什么是它仍然是有意义的分裂,1毫秒,10毫秒,100毫秒最小时间?
Answer 1:
使用现有的线程池(现有睡眠线程)多线程可以加快10-20ms操作。
具体同步调用唤醒线程和他们一起微乎其微,远小于1ms。
有一点要注意的是访问的局部性。 如果多个线程运行的代码正在访问相同的内存,那么处理器将不得不同步内存访问可能降低实际的性能提升。
同样,如果线程使用公共资源,需要锁定或其他线程同步,等待这些锁会降低性能。
如果在这些线程任何I / O,然后将其拆分成线将有助于加快速度之最。
Answer 2:
除非这短短的任务叫了很多的时间(即在一个循环中)没有一点因为充其量你要保存自己10ms的处理你占到任何任务切换/线程起动/同步甚至在时间...
Answer 3:
如果你有很多任务,你的工作线程连续拍摄任务,从公共队列(如在ExecutorService的),开销的任务是1..10微秒。 叉/加入设施是更有效的。 线程切换是如此的最昂贵的行动,而不是恢复2个睡眠线程,使主线程等待,在主线程更好的运行一项任务,只有一个工作线程。
文章来源: Is it possible to use multi-threading effectively for a short period of time