随笔分类 - Python全栈开发新版 / 【2.0】网络并发编程 / 【2.0】并发编程
发表于 2024-01-23 14:31阅读:17评论:0推荐:0
摘要:【一】多进程和多线程 import os.path import time from multiprocessing import Process from threading import Thread import requests from lxml import etree from fak
阅读全文 »
发表于 2024-01-23 14:30阅读:26评论:0推荐:0
摘要:【零】IO模型简介 我们研究的 IO 都是基于网络 IO 的 Stevens在文章中一共比较了五种IO Model: blocking IO nonblocking IO IO multiplexing signal driven IO (忽略) asynchronous IO 由signal dr
阅读全文 »
发表于 2024-01-23 14:29阅读:23评论:0推荐:0
摘要:基于 async 和 await 关键字的协程可以实现异步编程,这也是目前 Python 异步相关的主流技术。在这里我们主要介绍一下实现异步的模块:asyncio 模块 【一】asyncio 模块 asyncio 模块是 Python 中实现异步的一个模块,该模块在 Python3.4 的时候发布
阅读全文 »
发表于 2024-01-23 14:29阅读:32评论:0推荐:0
摘要:【一】基于单线程来实现并发 【0】并发的本质 本节的主题是基于单线程来实现并发 即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发 为此我们需要先回顾下并发的本质: 切换+保存状态 CPU正在运行一个任务 会在两种情况下切走去执行其他的任务(切换由操作系统强制控制) 一种情况是该任务发生
阅读全文 »
发表于 2024-01-23 14:29阅读:20评论:0推荐:0
摘要:【一】TCP实现并发的效果的原理 每开设一个客户端,就会有一个服务端服务 【1】服务端 from socket import * from threading import Thread def server_create(IP, PORT): server = socket() server.bi
阅读全文 »
发表于 2024-01-23 14:29阅读:28评论:0推荐:0
摘要:【零】队列queue介绍 queue队列 : 使用import queue,用法与进程Queue一样 queue is especially useful in threaded programming when information must be exchanged safely betwee
阅读全文 »
发表于 2024-01-23 14:28阅读:28评论:0推荐:0
摘要:【一】信号量(了解) 信号量Semahpore(同线程一样) 【1】引入 互斥锁 同时只允许一个线程更改数据,而Semaphore是同时允许一定数量的线程更改数据 比如厕所有3个坑,那最多只允许3个人上厕所,后面的人只能等里面有人出来了才能再进去 如果指定信号量为3,那么来一个人获得一把锁,计数加1
阅读全文 »
发表于 2024-01-23 14:28阅读:46评论:0推荐:0
摘要:【一】死锁 【1】介绍 死锁是指两个或多个进程,在执行过程中,因争夺资源而造成了互相等待的一种现象。 即两个或多个进程持有各自的锁并试图获取对方持有的锁,从而导致被阻塞,不能向前执行,最终形成僵局。 在这种情况下,系统资源利用率极低,系统处于一种死循环状态。 【2】示例 from threading
阅读全文 »
发表于 2024-01-23 14:28阅读:29评论:0推荐:0
摘要:【一】GIL全局解释器锁介绍 【1】官方解释 In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecod
阅读全文 »
发表于 2024-01-23 14:27阅读:15评论:0推荐:0
摘要:【一】问题 所有子线程都会进行阻塞操作,导致最后的改变只是改了一次 from threading import Thread import time money = 100 def task(): global money # 模拟获取到车票信息 temp = money # 模拟网络延迟 time
阅读全文 »
发表于 2024-01-23 14:26阅读:16评论:0推荐:0
摘要:【1】主线程死亡,子线程未死亡 主线程结束运行后不会马上结束,而是等待其他非守护子线程结束之后才会结束 如果主线程死亡就代表者主进程也死亡,随之而来的是所有子线程的死亡 from threading import Thread import time def task(name): print(f'
阅读全文 »
发表于 2024-01-23 14:25阅读:29评论:0推荐:0
摘要:【一】threading模块介绍 multiprocess模块的完全模仿了threading模块的接口 二者在使用层面,有很大的相似性,因而不再详细介绍 官网链接:https://docs.python.org/3/library/threading.html?highlight=threading
阅读全文 »
发表于 2024-01-23 14:25阅读:20评论:0推荐:0
摘要:【一】什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程 一条流水线必须属于一个车间,一个车间的工作过程是一个进程 车间负责把资源整合到一起,是一个资源单位,而一个车间内至少有一个流水线 流水线的工作需要电源,电源就相当于cpu 所
阅读全文 »
发表于 2024-01-23 14:24阅读:59评论:0推荐:0
摘要:【一】引入 借助于消息队列,进程可以将消息放入队列中,然后由另一个进程从队列中取出。 这种通信方式是非阻塞的,即发送进程不需要等待接收进程的响应即可继续执行。 multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的 进程间通信(IPC)方式二:管道(不推荐使用,了解
阅读全文 »
发表于 2024-01-23 14:24阅读:292评论:0推荐:0
摘要:【一】什么是进程同步(互斥锁) 互斥锁(Mutex)是一种用于多线程编程中控制对共享资源访问的机制。 其作用是保证在同一时刻只有一个线程在访问共享资源,从而避免多个线程同时读写数据造成的问题。 互斥锁的基本原理是在对共享资源进行访问前加锁,使得其他线程无法访问该资源,当访问完成后再解锁,使得其他线程
阅读全文 »
发表于 2024-01-23 14:24阅读:38评论:0推荐:0
摘要:【一】引入 【1】什么是进程间通信(Inter-Process Communication, IPC) 进程间通信(Inter-Process Communication, IPC)是指两个或多个进程之间进行信息交换的过程。 它是一种计算机编程技术,用于在不同进程之间共享数据和资源。 【2】如何实现
阅读全文 »
发表于 2024-01-23 14:23阅读:38评论:0推荐:0
摘要:【一】什么是守护进程 守护进程 (daemon) 是在计算机系统启动时就已经运行,并且一直在后台运行的一类特殊进程。 它们通常不与用户直接交互,也不接受标准输入和输出,而是在后台执行某种任务或提供某种服务。 守护进程往往是由系统管理员手动启动的,它们可以在系统启动时自动启动,一直运行在后台,直到系统
阅读全文 »
发表于 2024-01-23 14:23阅读:57评论:0推荐:0
摘要:【一】引入 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。 子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进
阅读全文 »
发表于 2024-01-23 14:21阅读:39评论:0推荐:0
摘要:【一】multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程。 Python提供了multiprocessing。 multiprocessing模块用来开启子进
阅读全文 »
发表于 2024-01-23 14:21阅读:28评论:0推荐:0
摘要:【一】什么是进程 【1】理论 正在进行的一个过程或者说一个任务。 而负责执行任务则是cpu。 【2】单任务 单核+多道,实现多个进程的并发执行 dream在一个时间段内有很多任务要做: python备课的任务 写书的任务 交女朋友的任务 王者荣耀上分的任务, 但dream同一时刻只能做一个任务(cp
阅读全文 »