Java并发编程学习(一)-- 编程的挑战

2017-04-21  本文已影响15人  柏树_Jeff

Java当初最吸引人的就是它的并发。并发的目的是为了让程序运行的更快,但是并不是启动更多的线程速度就快了。我们面临很多的挑战,比如上下文的切换、死锁,以及受限于硬件和软件资源等问题。

一、上下文切换
即使是单核处理器也支持多线程,CPU通过给每个线程分配时间片来实现这个机制,快速的切换就会让我们觉得是多个线程是同时进行的,当然多处理器的确是可以多个线程同时运行。

多线程和串行的示例代码

把代码中count的值从100001提高到100000001的一个时间对比如下:

100001:concurrency time is 3 ms,   serial time is 2 ms
1000001:concurrency time is 4 ms,   serial time is 6 ms 
10000001:concurrency time is 8 ms,     serial time is 15 ms 
100000001:concurrency time is 47 ms,     serial time is 73 ms

从上面的数据可以看出来(每个人的电脑有些许差异),并发执行不超过百万的时候,串行的速度会比并发执行快。原因是因为上下文的切换是要消耗性能的。

linux下可以通过vmstat命令来查看相关信息:


vmstat命令结果示例参考

倒数第六个表示上下文每秒切换的次数。

上一篇下一篇

猜你喜欢

热点阅读