• 一、多线程基本概念


    并发

    进程是资源分配的基本单位,切换进程时需要重新读取内存;

      比如说:QQ登录时,就会把QQ的相关代码(指令)从磁盘读到内存中,再读入CPU,存入寄存器中,再通过ALU执行指令;如果现在想登录微信,就需要为微信重新分配内存空间,然后把微信的代码拷贝到CPU寄存器中再执行。

    而线程是资源调度的基本单位,只需要寄存器保留运行状态即可。

      比如说:线程A在ALU中执行了一段指令,但如果此时需要切换线程B,就可以把当前的执行情况先存入CPU缓存中,以便切换回来时能够接着执行。线程切换时不会重新分配空间。

      使用并发的原因:同时执行多个事情,提高性能,多线程开发适合多核处理器。

    线程环境:

    线程存在于进程之中,进程内所有全局资源对于内部每个线程都是可见的。

    进程内典型全局资源如下:

    1)代码区:这意味着当前进程空间内所有的可见的函数代码,对于每个线程来说,也是可见的

    2)静态存储区:全局变量,静态空间

    3)动态存储区:堆空间

    线程内典型的局部资源:

    1)本地栈空间:存放本线程的函数调用栈,函数内部的局部变量等

    2)部分寄存器变量:线程下一步要执行代码的指针偏移量

    线程的使用

    1. 一个进程至少有一个线程,在C++中,main()函数是主线程的入口函数。
    2. 线程不是越多越好,需要看CPU的执行密度,比如:一个线程执行和等待的时间是1:3,那么4个线程比较ok。
    3. 从C++11开始,C++本身增加了对多线程的支持,意味着可移植性。

    心之所愿,永不相忘
  • 相关阅读:
    poj 2104(线段树)
    poj 1962(并查集+带权更新)
    hdu 2818(并查集,带权更新)
    hdu 1856
    hdu 3172
    hdu 1325(并查集)
    hdu 5023
    pku 2777(经典线段树染色问题)
    hdu 1671(字典树判断前缀)
    hdu 1247 (字典树入门)
  • 原文地址:https://www.cnblogs.com/zgll/p/15278690.html
Copyright © 2020-2023  润新知