首页 > 系统相关 >进程与线程

进程与线程

时间:2024-02-27 19:59:27浏览次数:26  
标签:分公司 可以 线程 进程 多线程 CPU

什么是线程?

​ 线程(thread)是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。

​ 说实话这个答案并不能打破我对线程陌生的认知,举个例子,假设你经营着一家物业管理公司。最初,业务量很小,事事都需要你亲力亲为。给老张家修完暖气管道,立马再去老李家换电灯泡——这叫单线程,所有的工作都得顺序执行。后来业务拓展了,你雇佣了几个工人,这样,你的物业公司就可以同时为多户人家提供服务了——这叫多线程,你是主线程。

img

​ 工人们使用的工具,是物业管理公司提供的,这些工具由大家共享,并不专属于某一个人——这叫多线程资源共享。工人们在工作中都需要管钳,可是管钳只有一把——这叫冲突。解决冲突的办法有很多,比如排队等候、等同事用完后的微信通知等——这叫线程同步。你给工人布置任务——这叫创建线程。之后你还得要告诉他,可以开始了,不然他会一直停在那儿不动——这叫启动线程(start)。如果某个工人(线程)的工作非常重要,你(主线程)也许会亲自监工一段时间,如果不指定时间,则表示你会一直监工到该项工作完成——这叫线程参与(join)。业务不忙的时候,你就在办公室喝喝茶。下班时间一到,你群发微信,所有的工人不管手头的工作是否完成,都立马撂下工具,跟你走人。因此如果有必要,你得避免不要在工人正忙着的时候发下班的通知——这叫线程守护属性设置和管理

img

​ 再后来,你的公司规模扩大了,同时为很多生活社区服务,你在每个生活社区设置了分公司,分公司由分公司经理管理,运营机制和你的总公司几乎一模一样——这叫多进程,总公司叫主进程,分公司叫子进程。总公司和分公司,以及各个分公司之间,工具都是独立的,不能借用、混用——这叫进程间不能共享资源。各个分公司之间可以通过专线电话联系——这叫管道。各个分公司之间还可以通过公司公告栏交换信息——这叫进程间共享内存。另外,各个分公司之间还有各种协同手段,以便完成更大规模的作业——这叫进程间同步。分公司可以跟着总公司一起下班,也可以把当天的工作全部做完之后再下班——这叫守护进程设置

进程的作用是什么呢?

进程可以说是一个“执行中的程序”。程序是指令、数据及其组织形式的描述,是一个没有生命的实体,只有处理器赋予程序生命时(操作系统执行之),它才能成为一个活动的实体,我们称其为进程。有了线程技术,我们就可以在一个进程中创建多个线程,让它们在“同一时刻”分别去做不同的工作了。这些线程共享同一块内存,线程之间可以共享对象、资源,如果有冲突或需要协同,还可以随时沟通以解决冲突或保持同步。

img

​ 不过,多线程技术不是万金油,它有一个致命的缺点:在一个进程内,不管你创建了多少线程,它们总是被限定在一颗CPU内,或者多核CPU的一个核内。这意味着,多线程在宏观上是并行的,在微观上则是分时切换串行的,多线程编程无法充分发挥多核计算资源的优势。这也是使用多线程做任务并行处理时,线程数量超过一定数值后,线程越多速度反倒越慢的原因。

img

​ 多进程技术正好弥补了多线程编程的不足,我们可以在每一颗CPU上,或者多核CPU的每一个核上启动一个进程,如果有必要,还可以在每个进程内再创建适量的线程,最大限度地使用计算资源解决问题。因为不在同一块内存区域内,和线程相比,进程间的资源共享、通信、同步等,都要麻烦得多,受到的限制也更多。

参考文档:https://www.zhihu.com/question/25532384

标签:分公司,可以,线程,进程,多线程,CPU
From: https://www.cnblogs.com/keepingstudying/p/18037724

相关文章

  • Java面试题笔记-多线程篇
    创建线程的几种方式继承Thread类,重写run方法实现Runnable接口,实现run方法实现Callable,实现call方法,配合FutureTask获取线程返回结果通过ThreadPoolExecuter线程池获取线程资源这几种方法的底层都是Runnable,Thread是Runnable接口的实现类,Callable配合FutureTask使用......
  • taskkill杀掉Windows上进程
    命令:taskkill/F/IMTLSvpn2.exe/T当出现以下问题,可能是需要管理员权限D:\playwright\tests>taskkill/F/IMTLSvpn2.exe/T成功:已终止PID29812(属于PID11384子进程)的进程。错误:无法终止PID32500(属于PID11384子进程)的进程。原因:拒绝访问。错误:......
  • 第八章 进程控制
    进程标识#include<unistd.h>pid_tgetpid(void);pid_tgetppid(void);//父IDuid_tgetuid(void);//实际用户IDuid_tgeteuid(void);//有效用户IDgid_tgetgid(void);//实际组IDgid_tgetegid(void);//有效组IDfork创建新进程#include<unistd.h>pid_tfork......
  • 19.提取token为全局(可以跨线程组)
    1:先提取token值--以下是json提取 2:后置处理beanshell执行__setProperty函数,access_token用新属性token替换3:在测试计划--用户定义的变量-设置全局token--用__P函数去取  ......
  • flume进程关闭
    #!/usr/bin/python3#coding=utf-8importsubprocessimportsysimportpsutildefproc(key):foriin['hadoop102','hadoop103']:ifkey=='start':print(f"---------------{i}节点,日志采集开启----------......
  • 类变量在高并发环境下引发的线程安全问题
    ###背景生产环境中,登录接口出现偶发性的异常,排查发现是获取当前时间的工具类抛出异常,以下为代码片段:``````java/***时间工具类*/publicclassDateUtil{ Loggerlogger=LoggerFactory.getLogger(this.getClass());privatefinalstaticSimpleDateFormatshortSdf=new......
  • 多线程系列(十) -ReadWriteLock用法详解
    一、摘要在上篇文章中,我们讲到ReentrantLock可以保证了只有一个线程能执行加锁的代码。但是有些时候,这种保护显的有点过头,比如下面这个方法,它仅仅就是只读取数据,不修改数据,它实际上允许多个线程同时调用的。publicclassCounter{privatefinalLocklock=newReentra......
  • 深入解析Python并发编程的多线程和异步编程
    本文分享自华为云社区《Python并发编程探秘:多线程与异步编程的深入解析》,作者:柠檬味拥抱。在Python编程中,多线程是一种常用的并发编程方式,它可以有效地提高程序的执行效率,特别是在处理I/O密集型任务时。Python提供了threading模块,使得多线程编程变得相对简单。本文将深入探讨thre......
  • 多进程拷贝数据文件
    多进程拷贝数据#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<sys/mman.h>#include<sys/wait.h>#include<unistd.h>#include<stdio.h>#include<string.h>intmmap_mamcpy(char**argv){......
  • 火绒误杀桌面进程的解决方法
    由于某大厂的奇葩代码操作,有概率会出现双显示器黑屏(出现请去买彩票),但可以调出任务管理器的问题。(Win1022h2/新安装电脑) 可以通过以下方法解决 方法一、(亲测有效)1、调用任务管理器,打开火绒主运行窗口1.1、Ctrl+Shift+ESC调用任务管理器1.2、在任务管理器中,点击“文件......