zoukankan      html  css  js  c++  java
  • posix 多线程有感线程

    1.进程:资源分配单位(存储器,文件)和CPU调度(分配)单位。 

       线程:作为CPU调度单位,而进程只作为其资源分配单位。

      (1)只拥有必不可少的资源,如:线程状态,寄存器上下文和栈。

       (2)具有就绪,阻塞和执行三种基本状态。

    2.进程和线程的比较:

    (1)地址空间和其他资源(如打开文件):进程间相互独立,同一进程的各线程间共享。

    (2)通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信。

    (3)调度和切换:线程上下文切换比进程上下文切换快得多。

    3.进程结束时不会等待其他线程结束,一旦进程结束就不关心线程在做什么。(pthread_exit,pthread_join)

    4.一个没有被分离的线程终止时会保留其虚拟内存,包括他们的堆栈和其他系统资源。分离线程意味着通知系统不再需要此线程,允许系统将分配给它的资源回收。

    5.如果需要获取线程的返回值,或者需要获知其何时结束,应该调用pthread_join函数。pthread_join函数将阻塞其调用者直到指定线程终止。

    6.在当前线程从函数pthread_create中返回以及新线程被调度执行之间不存在同步关系。即新线程可能在当前线程从pthread_create返回之前就运行了。甚至在当前线程从pthread_create返回之前,新线程就可能已经运行完毕。

    7.线程通常从启动函数中返回来终止自己。当调用pthread_exit退出线程或者调用pthread_cancel取消线程时,线程在调用完每个清理过程后也将进入终止态。如果线程已经被分离,则它立刻进入下一节——回收;否则,线程处于终止态,它还可以被其他的线程调用pthread_join连接。(这就像unix中的进程已经结束单还没有被一个wait调用回收一样。有时这种线程被称为“僵”线程,因为即使他们已经死了单还存在。僵线程可能会保留其运行时的大部分甚至所有资源。

    8.如果有其他线程在等待连接进入终止态的线程,则该其他线程将被唤醒。它将从其pthread_join调用中返回相应的值。一旦pthread_join获得返回值,终止线程就被pthread_join函数分离,并且可能在pthread_join函数返回前被回收。

    9.如果使用detachstate属性(设定PTHREAD_CREATE_DETACH)建立线程,或者调用pthread_detach分离线程,则当线程结束时将被立刻回收。如果终止线程没有被分离,则它将一直处于终止态直到被分离(通过pthread_detach)或者被连接(通过pthread_join)。(回收将释放所有线程终止时未释放的系统和进程资源,包括保存线程返回值的内存空间,堆栈,保存寄存器状态的内存空间等)。

  • 相关阅读:
    protocol buffer
    一个数组中只有0,1,2三种元素,要求对这样的数组进行排序
    初见-TensorRT简介<转>
    如何制作python安装模块(setup.py)
    Reservoir Sampling
    Tensorflow 之 name/variable_scope 变量管理
    Tensorflow之调试(Debug) && tf.py_func()
    python with和上下文管理工具
    hello--GAN
    metronic后台模板学习 -- 所用外部插件列表
  • 原文地址:https://www.cnblogs.com/wangfengju/p/6173151.html
Copyright © 2011-2022 走看看