zoukankan      html  css  js  c++  java
  • Linux的进程和线程关系

    一、理解Linux的进程,线程,PID,LWP,TID,TGID

    进程是资源分配的基本单位,线程是调度的基本单位
    进程是资源的集合,这些资源包括内存地址空间,文件描述符等等,一个进程中的多个线程共享这些资源。
    CPU对任务进行调度时,可调度的基本单位 (dispatchable entity)是线程。如果一个进程中没有其他线程,可以理解成这个进程中只有一个主线程,这个主进程独享进程中的所有资源。
    进程的个体间是完全独立的,而线程间是彼此依存,并且共享资源。多进程环境中,任何一个进程的终止,不会影响到其他非子进程。而多线程环境中,父线程终止,全部子线程被迫终止(没有了资源)。
    上述第一点说明是最基础的,也是最重要的。

    参考链接:https://www.cnblogs.com/wipan/p/9488318.html

    二、查看进程、线程的方法

    在 Linux C/C++ 中通常是通过 pthread 库进行线程级别的操作。

    在 pthread 库中有函数:

    pthread_t pthread_self(void);
    1
    它返回一个 pthread_t 类型的变量,指代的是调用 pthread_self 函数的线程的 “ID”。

    怎么理解这个“ID”呢?

    这个“ID”是 pthread 库给每个线程定义的进程内唯一标识,是 pthread 库维持的。

    由于每个进程有自己独立的内存空间,故此“ID”的作用域是进程级而非系统级(内核不认识)。

    其实 pthread 库也是通过内核提供的系统调用(例如clone)来创建线程的,而内核会为每个线程创建系统全局唯一的“ID”来唯一标识这个线程。

    这个系统全局唯一的“ID”叫做线程PID(进程ID),或叫做TID(线程ID),也有叫做LWP(轻量级进程=线程)的。

    参考链接:https://blog.csdn.net/test1280/article/details/87974748

  • 相关阅读:
    小程序中自定义组件
    rem是如何实现自适应布局的?
    基于vue前端状态管理模式
    vue项目使用keep-alive的作用
    JS移动元素的方法
    es6 promise then对异常处理的方法
    async/await 中await接收的promise的问题
    angularjs ngRoute demo
    angularjs $watch demo
    Html5 Geolocation demo
  • 原文地址:https://www.cnblogs.com/macrored/p/11508472.html
Copyright © 2011-2022 走看看