美文网首页
Java并发编程学习(一)-- 编程的挑战

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

作者: 柏树_Jeff | 来源:发表于2017-04-21 19:57 被阅读15次

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

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

    相关文章

      网友评论

          本文标题:Java并发编程学习(一)-- 编程的挑战

          本文链接:https://www.haomeiwen.com/subject/mhjigttx.html