Linux 线程(1):线程概述

一、进程与程序的区别

程序是应用程序作为一个静态文件存储在计算机系统的硬盘等存储空间中,而进程则是处于动态条件下由操作系统维护的系统资源管理实体,也就是程序的动态执行过程。

二、进程与线程的区别

进程是系统中程序执行和资源分配的基本单位。每个进程都拥有自己的数据段、代码段、堆栈段。为了减小进程切换的开销,引入了线程的概念,线程是一个进程内的基本调度单位,也可以称为轻量级进程,线程是在共享内存空间中并发的多道执行路径,共享一个进程的资源。同进程一样,线程也将相关的变量值放在线程控制表内。一个进程可以有多个线程,也就是有多个线程控制表和堆栈寄存器,但却共享一个用户地址空间,而进程在执行过程中拥有独立的内存空间。简而言之,一个程序至少有一个进程,一个进程至少有一个线程。需要注意的是,每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

三、线程分类

线程按照调度者可分为用户级线程和核心级线程
用户级线程:主要解决上下文切换问题,它的调度算法和调度过程全部由用户自行决定,运行不需要内核支持。在这里,操作系统往往会提供一个用户空间线程库,该库提供了线程的创建、调度、撤销等功能,而内核仍然仅对进程进行管理。如果一个进程中某个线程调用了一个阻塞的系统调用,那么该进程以及进程中其他线程会同时被阻塞。由于这里的处理器时间片分配是以进程为基本单位,所以每个线程执行的时间相对减少。因此,用户级线程在一个进程的多线程调度中无法发挥多处理器优势。
核心级线程:由操作系统内核创建和撤销。内核维护进程及线程的上下文信息以及线程切换。一个内核线程由于I/O操作而阻塞,不会影响其它线程的运行。核心级线程允许不同进程中线程按照同一相对优先调度方法进行调度,这样可以发挥多处理器并发优势。
现在操作系统基本上采用用户级线程与内核级线程并存的方法,一个用户级线程可以对应一个或多个核心级线程。在发挥多处理机性能的同时最大限度减少调度开销。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403495.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【年少的风】C#小学生算式×××2

测试面板对应的代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Data.OleDb; using System.Data.SqlClient; na…

计算文件的md5;vue计算文件md5值;计算图片的md5值;

github链接 1.先下载 npm i browser-md5-file -S2.在使用的vue页面引入和声明方法 import BMF from browser-md5-file const bmf new BMF()3.使用方法: function handle(e) {const file e.target.files[0];bmf.md5(file,(err, md5) > {console.log(err:, err);…

JS垃圾回收

JS本是一套全自动内存回收程序,当程序有不需要使用的数据时,JS会定期的回收,释放内存。 回收机制:标记回收 JS会自动回收标记为0的数据; 例:var a {}; (表示a数据有被引用,数据…

nginx 非socket代理配置

nginx反向代理socket配置 1&#xff0c;安装 git clone https://github.com/yaoweibin/nginx_tcp_proxy_modulecd nginx-1.8.1patch -p1 < /root/to/nginx_tcp_proxy_module/tcp.patch./configure --prefix/usr/local/nginx --with-http_stub_status_module --with-http_per…

Xcode 如何使用旧版本SDK以保证程序兼容性

一、首先锁定 SDK 的目标位置&#xff0c;打开 Finder 找到应用程序 Xcode 右键选择打开包内容&#xff0c;之后进入到目录 Contents/Developer/Platforms &#xff0c;可以看到不同平台的 SDK 分类&#xff0c;根据开发平台进入相关目录即可&#xff0c;之后进入到子目录 Deve…

eslint关闭===替换==;eslint关闭全等于校验;eslint关闭==校验

在.eslintrc.js文件下 rules: { eqeqeq: off, }详细可看此篇eslint设置

【转】【天道酬勤】 腾讯、百度、网易游戏、华为Offer及笔经面经

面试完毕&#xff0c;已跟网易游戏签约。遂敲一份笔经面经&#xff0c;记录下面试经过。类似于用日记记录自己&#xff0c;同时希望对师弟师妹有一定帮助。不是炫耀&#xff0c;只是希望攒RP&#xff0c;希望各位不要鄙视我。正所谓“饮水思源”。小弟来自广州华南理工大学&…

VIM常用基本命令

<1> vim 在命令行中输入vim,进入vim编辑器 <2> i,a,o 编辑按键&#xff0c;按下后下端显示 –INSERT– 插入命令&#xff1a; i键–从当前位置开始编辑&#xff1b; a键–从当前光标的下一个字符位置开始编辑&#xff1b; o键–从当前光标的下一行首开始编辑…

函数IIFE(匿名函数)

function init() {}init();init null; 上面是麻烦写法 IIFE&#xff08;Immediately-invoked function expression&#xff09;立即执行函数&#xff0c;执行后会直接被清理掉&#xff1b; 简单写法&#xff0c;也就是匿名函数&#xff1b; (function (ctr) {console.log(c…

codevs 1028 花店橱窗布置 (KM)

/*裸地KM*/ #include<iostream> #include<cstdio> #include<cstring> #define maxn 110 #define inf 0x3f3f3f3f using namespace std; int n,m,ans,match[maxn],w[maxn][maxn],d; int fx[maxn],fy[maxn],lx[maxn],ly[maxn]; bool Dfs(int i) {fx[i]1;for(in…

eslint常用设置;eslint关闭驼峰命名;eslint关闭全等于===校验;eslint关闭未定义变量报错;eslint关闭声明后未使用变量报错;eslint关闭单闭合标签校验;

详细配置eslint操作可看此篇 eslint各种限制规则可看此篇 在 .eslintrc.js 文件修改规则&#xff1a;0关闭 1警告 2报错 module.exports {root: true,parserOptions: {parser: babel-eslint,sourceType: module},env: {browser: true,node: true,es6: true,},extends: [plu…

linux 进程开始与终止

exit(0) 表示程序正常退出&#xff1b; exit(1)/exit(-1) 表示程序异常退出&#xff1b; exit() 结束当前进程/当前程序/&#xff0c;在整个程序中&#xff0c;只要被调用就结束&#xff0c;返回参数值&#xff1b; return() 是当前函数返回&#xff0c;当然如果是在主函数m…

类的友元

{ public:CBottle(double height, double diameter){m_Height height;m_Diameter diameter;}friend CCarton::CCarton(const CBottle& aBottle); private:double m_Height;double m_Diameter;//这是定义友元函数的模式 }; CCarton::CCarton(const CBottle& aBottle) …

⭐️ vue项目使用微信表情;vue引入微信表情emoji;vue中使用微信表情包emoji;

以下的表情是通过引入emoji-vue插件做的&#xff1b;如果只是简单的显示个别表情&#xff0c;其实还可以用html的emoji的标签来完成 &#x1f61d;&#x1f64a;&#x1f47f;&#x1f525;&#x1f335;&#x1f344;&#x1f349;&#x1f1e8;&#x1f1f3;&#x1f61a;&am…

简单的C++线程类实现, windows平台

一个抽象的线程基类, 再来个具体的线程类并实现相关接口&#xff0c;再写个主函数来调用下。上代码&#xff1a; Thread.h /*Windows平台线程类实现开发环境: Win7_x64 VC2012*/#ifndef __THREAD_H__#define __THREAD_H__#pragma once#include <string>#include <w…

yarn 包管理器设置淘宝镜像和sass镜像

淘宝镜像 yarn config set registry http://registry.npm.taobao.org/ -g sass镜像 yarn config set sass_binary_site http://cdn.npm.taobao.org/dist/node-sass -g

奈奎斯特采样定理:

&#xff08;1&#xff09;奈奎斯特采样定理&#xff1a; 当采样频率fs.max大于信号中最高频率fmax的2倍时&#xff0c;即&#xff1a;fs.max>2fmax,则采样之后的数字信号完整地保留了原始信号中的信息&#xff1b; 转载于:https://www.cnblogs.com/jocobHerbertPage/archiv…

TCP重组数据包分析

参照TCP/IP详解第二卷24~29章&#xff0c;详细论述了TCP协议的实现&#xff0c;大概总结一下TCP如何向应用层保证数据包的正确性、可靠性&#xff0c;即TCP如何实现对数据报文的重组。 首先要设计两个报文队列&#xff0c;一个存放正常来到的报文&#xff0c;一个存放失序到来…

vue项目引入字体图标iconfont

直接将icon下载成图片使用或者通过import方式移入url使用&#xff0c;看此篇 本文介绍两种使用方案&#xff1a;1.使用Font class引入字体图标&#xff08;推荐&#xff09; 2.使用Symbol 引用 如果是分批次的下载了好几次字体图标&#xff0c;那么可以将解压的代码css等文件放…

Why is processing a sorted array faster than an unsorted array?

这是我在逛 Stack Overflow 时遇见的一个高分问题&#xff1a;Why is processing a sorted array faster than an unsorted array?&#xff0c;我觉得这是一个非常好的用来讲分支预测&#xff08;Branch Prediction&#xff09;的例子&#xff0c;分享给大家看看 一、问题引入…