当前位置: 首页 > news >正文

沙坪坝网站建设公司选哪家好请人做网站域名和主机

沙坪坝网站建设公司选哪家好,请人做网站域名和主机,手机能用的网站,网站建设经费申请报告#x1f525;#x1f525; 欢迎来到小林的博客#xff01;#xff01;       #x1f6f0;️博客主页#xff1a;✈️林 子       #x1f6f0;️博客专栏#xff1a;✈️ Linux       #x1f6f0;️社区 :✈️ 进步学堂       #x1f6f0…         欢迎来到小林的博客       ️博客主页✈️林 子       ️博客专栏✈️ Linux       ️社区 :✈️ 进步学堂       ️欢迎关注点赞收藏✍️留言 目录 线程与进程重新认识进程 创建线程线程中独立的资源为什么线程切换的成本更低 线程与进程 我们都知道进程是操作系分配资源的基本实体。 每当操作系统创建一个新的进程时都会为这个进程分配资源例如 : 进程地址空间页表…等。 那如何理解线程呢 在Linux系统下并没有真正意义上的线程。因为在Linux系统下线程没有属于自己的数据结构。而windows操作系统是为线程设定了指定的数据结构。而在Linux系统下线程复用了进程的PCB。也就是说描述线程和进程的结构体都是task_struct。 而这些PCB都共享同一块进程地址空间共享同一块页表…以及其他的资源。 而这个时候进程就不仅仅是一个PCB了而是多个PCB 当前进程的资源 进程。而每一个PCB都是一个执行流无论是线程还是进程CPU都不关心。因为CPU只负责调度PCB。而通过一定的技术手段可以将进程的资源以一定的方式分配给不同的task_struct。 所以可以得出结论 进程是承担操作系统分配资源的基本实体。 线程是在进程的内部执行。因为它们共享同一块进程地址空间以及其他资源。 线程是CPU调度的基本单元 重新认识进程 在之前的认知中我们都认为一个进程就是一个PCB 程序的代码和数据。 但是现在我们要重新认识进程了。当进程内部只有一个执行流的时候 进程 PCB 程序的代码和数据。 当进程内部有多个执行流的时候 那么 进程 多个PCB 程序的代码和数据。 在CPU的视角中CPU其实根本不关心当前调用的是进程还是线程因为它只认PCB也就是task_struct。所以在linux系统下 PCB 其他OS内的PCB。因为当Linux下的进程包含多个执行流的时候那么多个PCB其实共享了大部分资源那么此时的PCB就会小于其他OS内的PCB。因为其他的OS进程和线程都有属于各自的数据结构。 在Linux下Linux是用进程来模拟线程的 这也就意味着Linux并不能直接给我们提供线程相关的接口只能提供轻量级进程接口不过好在有一位Linux系统工程师在用户层实现了一套多线程方案以库的方式提供给了用户进行使用那就是 pthread线程库也叫原生线程库。 创建线程 在初步了解线程之后那么我们可以来创建一个线程见见线程是什么样子的。 我们先认识一下创建线程的函数。 int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg); 第一个参数为线程的tid 第二个参数为线程的属性 第三个参数是一个函数指针为线程的执行函数 第四个参数为执行函数的参数测试代码 #includeiostream #includepthread.h #includeunistd.h void* ThreadRun(void* name) {while(1){std::cout this is (char*)name , pid getpid() std::endl;sleep(1);} } int main() {pthread_t tids[5]; char name[64];for(int i 0 ; i 5 ; i){snprintf(name,sizeof name,%s:%d,Thread ,i);pthread_create(tidsi,nullptr,ThreadRun,(void*)name);sleep(1);}while(1){std::cout this is main thread , pid getpid() std::endl;sleep(3);} }记得在编译的时候加上一个-lpthread选项否则无法编译通过因为 -lphtread原生线程库并不属于C/C库。 然后运行后我们发现。5个线程一个主线程它们打印出来的进程pid都是一样的。 然后我们再用ps ajx | head -1 ps ajx | grep “你的可执行程序名称” 来查看当前运行的进程 我们发现只有一个进程这是因为线程是进程内部执行的所以我们无法看到线程如果想看线程我们可以用ps -aL | head -1 ps -aL | grep 要查看的进程名称 即可查看当前进程下的线程。 我们可以看到这个进程中有6个线程一个主线程。剩下的5个创建的线程。 我们可以发现它们的PID都是一样的。但是LWP是不一样的 所以CPU调度看的是LWP还是PID 呢 答案肯定是LWP因为线程是CPU调度的基本单元。如果是根据PID进行调度那么这么多线程的PID都一样就会产生歧义。所以CPU调度实际是根据LWP字段调度的。 验证线程之间共享地址空间 很简单我们只需要创建一个全集变量并在主线程对该变量进行修改然后让所有线程打印该变量。其他线程的值也发生了改变那就说明线程之间共享了地址空间。 #includeiostream #includepthread.h #includeunistd.h int x 0;void* ThreadRun(void* name) {while(1){std::cout this is (char*)name , pid getpid() x x std::endl;sleep(1);} }int main() {pthread_t tid; pthread_create(tid,nullptr,ThreadRun,(void*)new thread);while(1){x;std::cout this is main thread , pid getpid() x x std::endl;sleep(1);} } 运行结果 我们发现全局变量x被所有线程所共享。 线程中独立的资源 线程共享进程数据但也拥有自己的一部分数据比如 线程id一组寄存器(相当于上下文)栈(每个线程有独立的栈结构让线程与线程之间独立)errno信号屏蔽字调度优先级 为什么线程切换的成本更低 1.因为进程地址空间和页表不需要切换 但是地址空间和页表切换并没有太大的消耗。线程切换成本更低的本质原因是因为CPU内部有L1~L3 cache。 我们都知道CPU处理指令是一条一条处理的。但如果每次CPU都去内存读一条指令那么速度是非常非常慢的。所以CPU内部有个缓冲区。会先把内存中的指令放进CPU内部缓冲区。也就是预读代码这样CPU就不用频繁的去内存中读取指令。而是直接在内部缓冲区里读这样子速度是非常快的。而线程切换cache不会失效。但如果是进程切换那么cache就会立马失效只能重新缓冲。所以这才是线程切换更快的本质原因因为线程切换CPU内部的缓冲区不用重新缓存。
http://wiki.neutronadmin.com/news/17803/

相关文章:

  • 做钢材的网站有哪些手工灯笼
  • 公司网站设计维护碑林区营销型网站建设
  • 免费的网页网站动画网站模板
  • 西宁微信网站建设需要多少钱网站seo诊断报告
  • 网站建设需要度搜去湖北企业网站建设多少钱
  • 对网站建设有什么样好的建设意见wordpress更改默认头像
  • 台州哪家做企业网站比较好网站建设7个基
  • 做企业网站的字体大小要求久久建筑网可信吗
  • 抚顺网站推广WordPress关闭邮箱通知
  • 网站开发哪好策划书平台建设部分
  • 大网站有哪些中国零售业博览会
  • 做网站挣钱快吗重庆网站开发服务
  • 单位做网站图片素材浏览器免费下载安装
  • 招商网站平网站平台做免费网站怎么赚钱
  • 石家庄网站定做网站渠道建设
  • 互联网网站基础报价单模板怎么做
  • 西昌有做网站的公司吗天元建设集团有限公司商票逾期
  • 公司建设网站带来什么集团网站策划方案
  • 用系统建购物网站软件推广网站
  • 企业网站版面设计技巧wordpress扩展字段
  • 电脑做网站服务器网站建设技术可行性
  • 郑州做网站优化外包蛋糕设计网站
  • 高端网站开发设计红色基调的网站
  • 自己建的网站无法打开网站模板在线制作
  • 无锡制作网站价格i网站制作
  • 江苏省建设厅政务网站桔子摄影
  • 有什么兼职做it的网站wordpress 文章间距
  • 番禺五屏网站建设为什么wordpress慢
  • 公主坟网站建设淮阴区住房和城乡建设局网站
  • 婚纱摄影网站论文网站浮动qq