操作系统-并发-线程-进程

操作系统/应用程序

什么是操作系统?

精简的说法:操作系统就是一个人协调,管理和控制计算机硬件资源和软件资源的控制程序

操作系统位于计算机硬件与应用软件之间,本质也是一个软件.操作系统由操作系统的内核(运行于内核态,管理硬件资源)以及系统

调用(运行于用户态,为应用程序员写的应用程序提供系统调用接口)两部分组成,所以,单纯的说操作系统是运行于内核态的,是不准确的.

  

日常我们所知道的操作系统/应用程序:

硬件:

  -硬盘

  -CPU

  -主板

  -显卡

  -内存

  -电源

  -......

软件(装系统):

  -一个由程序员写出来的软件,该软件用于控制计算机硬件,让他们之间相互配合.

安装应用程序(装软件):

  例如:QQ,百度云,Pycharm......

并发,并行!!!

什么是并发?并行?

  一般来说,并发指的是多个任务能够同时存在,是否同时存在执行并不重要,而并行,主要侧重于多个任务之间能够同时运行,

所以,我们也可以理解为并行是并发的一个子集.

无论是并发还是并行,在用户看来都是同时运行的,不管是线程还是进程,都只是一个任务而已,真正干活的是CPU,CPU来做这些任务,

而一个CPU同一时刻只能执行一个任务.

一并发:是伪并行,即看起来是同时运行,单个CPU+多道技术实现并发(并行也属于并发)

二并行:同时运行,只有具备多个CPU才能实现并行

  

所有现代计算机经常会在同一时间做很多件事,一个用户的PC(无论是单cpu还是多cpu),都可以同时运行多个

任务(一个任务可以理解为一个进程)。

    启动一个进程来杀毒(360软件)

    启动一个进程来看电影(暴风影音)

    启动一个进程来聊天(腾讯QQ)

所有的这些进程都需被管理,于是一个支持多进程的多道程序系统是至关重要的

多道技术概念回顾:内存中同时存入多道(多个)程序,cpu从一个进程快速切换到另外一个,

使每个进程各自运行几十或几百毫秒,这样,虽然在某一个瞬间,一个cpu只能执行一个任务,

但在1秒内,cpu却可以运行多个进程,这就给人产生了并行的错觉,即伪并发,以此来区分多

处理器操作系统的真正硬件并行(多个cpu共享同一个物理内存)

Python并发编程之多进程

什么是进程?

  进程:正在进行的一个过程或一个任务,而负责执行任务的是CPU.

进程于程序的区别:

  程序仅仅是一堆代码而已,而进程指的是程序的运行过程.

进程的层次结构:

  无论是UNIX还是Windows,进程只有一个父进程,不同的是:

  1,在UNIX中所有的进程,都是init进程为根,组成树形结构.父子进程共同组成一个进程组.

  在Windows中,没有进程层次的概念,所有进程都是地位相同的,唯一类似于进程程序的暗示,

是在创建进程时,父进程得到一个特别的句柄,该进程可以用来控制子进程,但是父进程有权把该句柄

传给其子进程,这样就没有层次了.

创建进程的类

  

process([group[,target[,name[,args[,kwargs]]]]]),由该类实例化得到的对象,表示一个子进程中的任务(尚未启动)

强调:
1:需要使用关键字的方式来指定参数
2.args指定的为传给target函数的位置参数,是一个元组形式,必须有逗号.

参数介绍:

1 group参数未使用,值始终为None

2 target 表示调用对象,即子进程要执行的任务

3 args表示调用对象的位置参数元组,args = (1,2,‘egon‘,)

4 kwargs 表示调用对象的字典,kwargs = {‘name‘:egon,‘age‘:18}

5 name 为子进程的名称

属性介绍:

1.p.daemon:默认值为False如果设为True,代表p为后台运行的守护进程,当p的父进程终止时,p也随之终止,并且设定为True后,p不能创建自己的新进程,必须在p.start()之前设置.

2.p.name进程的名字

3.p.pid:进程的pid

4,p.exitcode:进程在运行时为None.如果为-N,表示被信号N结束

5.p.authkey:进程的身份验证键,默认是由os.urandom(),随机生成的32字符的字符串.这个键的用途是为涉及网络连接的底层进程间提供安全性,这类连接只有在具有相同的身份验证键时才能成功

Python并发编程之多线程

什么是线程?

进程只是用来把资源集中到一起,(进程只是一个资源单位,或者说资源集合),而线程才是CPU上的执行单位.

多线程(多个控制线程)的概念,在一个进程中存在多个控制线程,多个控制线程共享该进程的地址空间,相当于一个车间内

有多条流水线,共用一个车间资源.

为什么要用多线程?

多线程指的是,在一个进程中开启多个线程,简单的讲:如果多个任务共用一块地址空间,那么必须在一个进层内开启多个线程,

1.多线程共享一个进程的地址空间,

2.线程比进程更轻量级,线程比进程更容易创建课撤销,在许多操作系统中,创建一个线程比创建一个进程要快10~100倍,在有大量线程

 需要动态和快速修改时,这一特性很有用

3.若多个线程都是CPU密集型的,那么并不能获得性能上的增强,但是如果存在大量的计算和大量的I/O处理,拥有多个线程允许这些活动

 彼此重叠运行,从而会加快程序执行的速度.

4.在多CPU系统中,为了最大限度的利用多核,可以开启多个线程,比开进程开销要小的多.

开启线程的方法

from threading import Thread
import time
def sayhi(name):
    time.sleep(1)
    print(‘%s say holle‘ %name)

if __name__ = ‘__main__‘:
    t = Thread(target = sayhi,args = (‘egon‘,))
    t.start()
    print("主线程")

方式一

from threading import Thread
import time
class Sayhi (Thread)
    def __init__(self,name)
        super().__init__()
        self.name = name
    def run(self):
        time.sleep(2)
        print(‘%s say hello‘ % self.name)

if __name__ == ‘__main__‘:
    t = Sayhi(‘egon‘)
    t.start()
    print("主线程")

方式二

Python 线程编写:

import threading
v1 = [11,22,33]    #+1
v2 = [44,55,66]    #+100

def func(data,plus):
    for i in range(len(data)):
        data[i] = data[i]+plus

t1 = threading.Thread(target = func,args = (v1,1))
t1.start()

t2 = threading.Thread(target = func,args = (v2,100))
t2.start()

1. 计算密集型多线程无用

import threading
import requests
import uuid

url_list =[
‘https://www3.autoimg.cn/newsdfs/g28/M05/F9/98/120x90_0_autohomecar__ChsEnluQmUmARAhAAAFES6mpmTM281.jpg‘,
            ‘https://www2.autoimg.cn/newsdfs/g28/M09/FC/06/120x90_0_autohomecar__ChcCR1uQlD6AT4P3AAGRMJX7834274.jpg‘,
            ‘https://www2.autoimg.cn/newsdfs/g3/M00/C6/A9/120x90_0_autohomecar__ChsEkVuPsdqAQz3zAAEYvWuAspI061.jpg‘,]

def task(url):
    ret = requests.get(url)
    file_name = str(uuid.uuid4())+‘.jpg‘
    with open (file_name,mode=‘wb‘)as f:
        f.write(ret.content)

for url in url_list:
    t = threading.Thread(target = task,args = (url,))
    t.start()

2. IO操作 多线程有用

  

原文地址:https://www.cnblogs.com/wangjun187197/p/9622349.html

时间: 2024-10-13 04:34:38

操作系统-并发-线程-进程的相关文章

并发线程/进程的通信

一般来说并发通信有两种策略:共享数据(内存)和消息传递. 共享数据(内存)适用的场景: 1.速度要求高 2.一个写进程,多个读进程 3.共享内存更适合单机多核的并发编程 共享数据的问题: 1.需要解决条件竞争和线程/进程同步问题(线程锁,互斥量,信号量) 2.大量的上下文切换 基于共享内存的并发模型的应用:开源量化项目——功夫 功夫使用共享内存作为核心通信机制.在通信延迟这个指标上,共享内存远远领先于其他一切诸如消息队列.网络协议之类的方法. 使用内存映射文件之后,在解决通信问题的同时,还同时得

操作系统中的进程和线程

进程与进程的作用 当我们双击程序图标,开始运行程序时,就产生了一个进程.所以进程的本质是一个正在执行的程序.进程包含了程序运行的所需要的所有信息,如代码段,数据段,程序计数器(存放下一条指令所在的地址),进程标识符(PID)进程控制块(PCB,用来保存进程退出CPU时的现场信息)等等信息. 所以进程可以看做是容纳程序运行的所有信息的容器. 值得注意的是,一个程序如果运行了两遍,则算是两个进程.如运行了两个word程序,这两个进程除了代码段,其他信息都是不一样的,事实上,这两个进程共享代码段. 进

操作系统中的进程与线程

操作系统中的进程与线程 转自:http://www.cnblogs.com/CareySon/archive/2012/05/04/ProcessAndThread.html 简介 在传统的操作系统中,进程拥有独立的内存地址空间和一个用于控制的线程.但是,现在的情况更多的情况下要求在同一地址空间下拥有多个线程并发执行.因此线程被引入操作系统. 为什么需要线程? 如果非要说是为什么需要线程,还不如说为什么需要进程中还有其它进程.这些进程中包含的其它迷你进程就是线程. 线程之所以说是迷你进程,是因为

操作系统学习笔记----进程/线程模型----Coursera课程笔记

操作系统学习笔记----进程/线程模型----Coursera课程笔记 进程/线程模型 0. 概述 0.1 进程模型 多道程序设计 进程的概念.进程控制块 进程状态及转换.进程队列 进程控制----进程创建.撤销.阻塞.唤醒.... 0.2 线程模型 为什么引入线程 线程的组成 线程机制的实现 用户级线程.核心级线程.混合方式 1. 进程的基本概念 1.1 多道程序设计 允许多个程序同时进入内存运行,目的是为了提高CPU系统效率 1.2 并发环境与并发程序 并发环境: 一段时间间隔内,单处理器上

(并发编程)进程池线程池--提交任务的2种方式、协程--yield greenlet,gevent模块

一:进程池与线程池(同步,异步+回调函数)先造个池子,然后放任务为什么要用"池":池子使用来限制并发的任务数目,限制我们的计算机在一个自己可承受的范围内去并发地执行任务池子内什么时候装进程:并发的任务属于计算密集型池子内什么时候装线程:并发的任务属于IO密集型 #提交任务的两种方式:    # 同步调用:提交完一个任务之后,就在原地等待,等待任务完完整整地运行完毕拿到结果后,再执行下一行代码,会导致任务是串行执行的    # 异步调用:提交完一个任务之后,不在原地等待,结果???,而是

15.python并发编程(线程--进程--协程)

一.进程:1.定义:进程最小的资源单位,本质就是一个程序在一个数据集上的一次动态执行(运行)的过程2.组成:进程一般由程序,数据集,进程控制三部分组成:(1)程序:用来描述进程要完成哪些功能以及如何完成(2)数据集:是程序在执行过程中所需要使用的一切资源(3)进程控制块:用来记录进程外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志.3.进程的作用:是想完成多任务并发,进程之间的内存地址是相互独立的二.线程:1.定义:最小的执行单位,线程的出现是为了

操作系统学习之进程和线程

为什么会有进程 进程是一个计算机工程概念,进程包含一个程序运行的所有资源.进程提供程序的抽象 一个独立的逻辑流 一个私有的地址空间 逻辑控制流 如果使用调试器调试一个程序,就能看到一些列的(PC),这些PC的序列就是逻辑控制流. 并发流 一个逻辑流的执行在时间上与另一个流重叠,成为并发流,多个流并发地执行的一般现象称为并发.简单理解为同时做多件事. 并行: 一般出现在多个CPU上. 多任务: 一个进程和其他进程轮流运行的概念. 时间片: 一个进程执行他的控制流的每一时间片段. 私有地址空间 进程

Python并发编程-进程 线程 协程

一.进程 进程:就是一个程序在一个数据集上的一次动态执行过程. 进程由三部分组成: 1.程序:我们编写的程序用来描述进程要完成哪些功能以及如何完成 2.数据集:数据集则是程序在执行过程中所需要使用的资源 3.进程控制块:进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感 知进程存在的唯一标志. 二.线程                                                                        

服务器线程并发和进程并发

进程和线程的使用在前面博文已经讲述完毕,在完成一个最简单的服务器之后,就是要考虑下如何实现并发服务器了. 要实现服务的并发,只能通过进程和线程两种方式. 之前提到过listen_fd和connect_fd,listen用于监听是否有客户端连接,维护两个fd队列,没完成握手的和完成就绪的. connect从就绪队列取描述符,这个connect_fd描述符将用于数据通信,所以要实现并发,就是将connect_fd分发到线程或进程上,由他们去独立完成通信. 在实际并发服务器应用场合,在IO层大多通过两