并发编程

Posted FireLightning

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发编程相关的知识,希望对你有一定的参考价值。

一 、多进程并发和多线程并发

  多进程并发有进程间通信机制,更加安全。第一个缺点:进程间通信为避免一个进程修改另一个进程,比如读时共享写时复制使得花销更大;第二个缺点:需要启动进程,还要系统内核来管理进程,因为C++ 没有对进程提供任何封装。

  但是进程相对独立,可以分布式运行在独立的机器上,算是一个优点。

  多线程共享内存,但是程序员要确保访问到的数据线程一致性。

二、并发的意义

  分离关注点和提高性能。

  1、 分离关注点:就想QT里面将图像处理函数交给线程,主控线程关注用户输入,等待接收线程返回。防止页面卡死。

 2、 提高性能:那是肯定。

  两种方式利用并发提高性能:

   第一,将一个单个任务分成几部分,且各自并行运行,从而降低总运行时间。这就是任务并行(task parallelism)。虽然这听起来很直观,但它是一个相当复杂的过程,因为在各个部分之间可能存在着依赖。区别可能是在过程方面:一个线程执行算法的一部分,而另一个线程执行算法的另一个部分或是在数据方面;不是所有算法都是易并行算法。

 第二,每个线程在不同的数据部分上执行相同的操作,对数据的并行处理,称为数据并行。

 但是,创建线程,线程要独立的栈空间,创建太多线程会消耗操作系统资源。一般每个线程会有10MB空间。每个进程4G也只能有4096个,此时其他3区将没有任何空间,而且堆的要求空间远远大于栈。可以使用线程池技术,但是线程池创建也是一个动态的管理技术,也要占用资源。所以,小任务不要用线程,也不要创建太多线程。

以上是关于并发编程的主要内容,如果未能解决你的问题,请参考以下文章

golang代码片段(摘抄)

《java并发编程实战》

Java并发编程实战 04死锁了怎么办?

Java并发编程实战 04死锁了怎么办?

Java编程思想之二十 并发

golang goroutine例子[golang并发代码片段]