【python】 进程与线程

进程与线程

进程和线程是操作系统中的两个重要概念。

进程是指在操作系统中正在运行的一个程序的实例。每个进程都有自己的地址空间、内存、文件描述符和其他系统资源。进程之间是相互独立的,彼此之间不能直接访问对方的内存或资源。进程之间的通信需要通过一些特定的机制来实现,比如管道、消息队列、共享内存等。

线程是进程中的一个执行单元,一个进程可以包含多个线程。线程与进程共享同一地址空间和其他系统资源,可以直接访问进程的内存。不同线程之间的切换比不同进程之间的切换要快捷高效。线程之间的通信可以直接通过共享内存来实现,避免了进程间通信的开销。

进程和线程各有优缺点。进程之间相互独立,可以更好地实现资源隔离和安全性,但进程切换开销较大。线程之间切换开销小,可以更好地实现并发执行和资源共享,但线程之间的访问需要通过同步机制来进行控制。

在实际应用中,进程和线程通常是结合使用的。进程可以用来实现任务的隔离和资源管理,而线程可以用来实现任务的并发执行和资源共享。

CPU时间片

CPU时间片是操作系统中的一个概念,指的是每个进程在CPU上执行的时间段。操作系统使用时间片轮转调度算法来分配CPU时间片给各个进程。每个进程被分配一个固定的时间片,当时间片用完后,操作系统会中断该进程的执行,重新分配CPU时间片给其他进程。

时间片的长度通常是几毫秒到几十毫秒,具体取决于操作系统的设计和配置。较短的时间片可以提高系统对多任务的响应速度,但也会增加进程切换的开销;较长的时间片可以减少进程切换的开销,但可能导致系统响应速度下降。

时间片轮转调度算法可以保证每个进程都有机会执行,并且公平地分配CPU资源。当一个进程的时间片用完后,它会被移到就绪队列的末尾,等待下一次调度。这种算法适用于多任务环境,可以提高系统的吞吐量和响应速度。

python多进程

import os
from multiprocessing import Process

num = 1000


def sing():
    global num
    for i in range(50):
        num -= 1
    print(os.getpid(), "唱歌", num) 
    #os.getpid()函数返回当前进程的进程ID。os.getppid()函数返回当前进程的父进程ID。


def dance():
    global num
    for i in range(50):
        num -= 1
    print(os.getpid(), "跳舞", num)


if __name__ == "__main__":
    p1 = Process(target=sing)
    p1.start()

    p2 = Process(target=dance)
    p2.start()

    print("主进程", num)

主进程 1000
44620 唱歌 950
76004 跳舞 950

python多线程

import threading

def print_numbers():
    for i in range(1, 11):
        print(i)

def print_letters():
    for letter in 'abcdefghij':
        print(letter)

# 创建两个线程
thread1 = threading.Thread(target=print_numbers)
thread2 = threading.Thread(target=print_letters)

# 启动线程
thread1.start()
thread2.start()

# 等待线程结束
thread1.join()
thread2.join()
 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值