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

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命令结果示例参考

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容