zoukankan      html  css  js  c++  java
  • 并发编程(1)简介

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

      多进程并发有进程间通信机制,更加安全。第一个缺点:进程间通信为避免一个进程修改另一个进程,比如读时共享写时复制使得花销更大;第二个缺点:需要启动进程,还要系统内核来管理进程,因为C++ 没有对进程提供任何封装。
    
      但是进程相对独立,可以分布式运行在独立的机器上,算是一个优点。
    
      多线程共享内存,但是程序员要确保访问到的数据线程一致性。
    

    二、并发的意义

      分离关注点和提高性能。
    
      1、 分离关注点:就想QT里面将图像处理函数交给线程,主控线程关注用户输入,等待接收线程返回。防止页面卡死。
    
     2、 提高性能:那是肯定。
    
      两种方式利用并发提高性能:
    
       第一,将一个单个任务分成几部分,且各自并行运行,从而降低总运行时间。这就是任务并行(task parallelism)。虽然这听起来很直观,但它是一个相当复杂的过程,因为在各个部分之间可能存在着依赖。区别可能是在过程方面:一个线程执行算法的一部分,而另一个线程执行算法的另一个部分或是在数据方面;不是所有算法都是易并行算法。
    
     第二,每个线程在不同的数据部分上执行相同的操作,对数据的并行处理,称为数据并行。
    
     但是,创建线程,线程要独立的栈空间,创建太多线程会消耗操作系统资源。一般每个线程会有10MB空间。每个进程4G也只能有4096个,此时其他3区将没有任何空间,而且堆的要求空间远远大于栈。可以使用线程池技术,但是线程池创建也是一个动态的管理技术,也要占用资源。所以,小任务不要用线程,也不要创建太多线程。
    

    三、多进程是系统调用,多线程是函数库(C++11)
    四、多线程一个例子:
    #include
    #include //①
    void hello() //②
    {
    std::cout << "Hello Concurrent World ";
    }
    int main()
    {
    std::thread t(hello); //③
    t.join(); //④
    }
    在 std::thread 对象的构造函数中指定——本例中,被命名为t。t 对象拥有新函数hello()作为其初始函数。如果不加join,那么主控线程会自己继续运行结束,可能在hello之前也可能在之后。加入join会阻塞等待t对象返回。(join,cancle,exit三个线程结束函数的区别)

  • 相关阅读:
    jqueryeasyui1.2.3学习
    继续干IT的十个理由
    设计模式建造者模式(Builder Pattern)
    一段不错的视频
    第十一章:配置和安全IntelliMorph
    第十一章:配置和安全许可和配置
    物理库存和财务库存浅析
    第十一章:配置和安全概述
    IE6 双倍边距的解决方法
    asp实现关键词不区分大小写搜索并高亮显示
  • 原文地址:https://www.cnblogs.com/huangfuyuan/p/9125582.html
Copyright © 2011-2022 走看看