码迷,mamicode.com
首页 > 编程语言 > 详细

python下的线程 进程,以及如何实现并发服务器

时间:2018-08-14 16:15:32      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:操作系统   存储   遇到   临时   睡眠   共享   时间片   ima   inf   

在一个CPU(一核)的电脑上,

程序的运行是并发运行的,调度的算法叫时间片轮转法,也叫轮询法

在多CPU(多核)的电脑上,一个CPU跑一个程序,刚程序运行数量小于核心数时,程序是并行的

并发:看上去一起执行,同时在发生

技术分享图片

 

 

并行:真正的一起执行,同时在进行

技术分享图片

 进程的概念:

  计算机程序是存储在磁盘上的可执行二进制(或者其他类型)文件

    只有当他们被加载到内存中,并被操作系统调用的时候,他们才会拥有自己的生命周期

  进程则表示一个正在执行的程序

    每个程序都拥有自己的地址空间,内存,数据栈以及其他用于跟踪执行的辅助资料

  操作系统负责其上的所有进程的执行

    操作系统会为这些进程合理的分配执行时间

线程的概念:

  线程被称作轻量级进程

     与进程类似,不过他们是在不同的进程下执行的。并且他们会共享相同的上下文

  当其他线程执行时,他可以被抢占(中断),和临时挂起(睡眠)---------让步

    线程的轮询调度机制类似于进程的轮询调度。只不过这个调度不是由操作系统来负责的,而是由python解释器来负责

 

 

CPU,进程,线程之间的调度关系

CPU——>进程——>线程

 技术分享图片

 

 

利用进程和线程,实现并发服务器

线程:(GIL全局解释器锁:遇到阻塞就切换)

from socket import *
import threading
server = socket()
server.bind((‘‘, 9999))
server.listen(1000)

def func(conn):
    while True:
        recv_date = conn.recv(1024)
        if recv_date:
            print(recv_date.decode(utf8))
            conn.send(recv_date)
        else:
            conn.close()
            break

while True:
    conn, addr = server.accept()
    w = threading.Thread(target=func, args=(conn, )) # 开启一个子线程
    w.start()

进程:

import multiprocessing
from socket import *
server = socket()
server.bind((‘‘, 9999))
server.listen(10)

def func(conn):
    while True:
        recv_date = conn.recv(1024)
        if recv_date:
            print(recv_date.decode(utf8))
            conn.send(recv_date)
        else:
            conn.close()
            break

while True:
    conn, addr = server.accept()
    w = multiprocessing.Process(target=func, args=(conn, )) # 开启一个子线程
    w.start()

 

python下的线程 进程,以及如何实现并发服务器

标签:操作系统   存储   遇到   临时   睡眠   共享   时间片   ima   inf   

原文地址:https://www.cnblogs.com/pywjh/p/9475136.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!