• 网络编程遇到相关问题

    为什么出现粘包问题?

    TCP协议就类似于打电话
    只有在TCP协议中才会出现粘包现象,因为TCP协议是流式协议
    它的特点是将数据量小并且时间间隔比较短的数据一次性打包发送出去
    本质其实还是因为我们不知道需要接收的数据的长短

    如何解决粘包问题?

    1 发送数据直接先告诉对方数据量的大小
    2 利用struct模块定制我们自己的消息传输协议

    TCP的大文件上传

    客户端:
            1.制作字典的报头(固定4个长度)
            2.发送报头
            3.发送字典
            4.最后再发真实数据
    服务端:
            1.先接收4个长度的报头
            2.解析报头获取字典的长度
            3.接收字典数据  从字典中获取真实数据的详细信息
            4.接收真实数据

    udp协议

    UDP协议就类似于发短信
    1.udp协议客户端允许发空
    2.udp协议不会粘包
    3.udp协议服务端不存在的情况下,客户端照样不会报错
    4.udp协议支持并发
    
    UDP叫数据报协议,意味着发消息都带有数据报头
    udp的server不需要就行监听也不需要建立连接
    在启动服务之后只能被动的等待客户端发送消息过来,客户端发送消息的时候,要带上服务端的地址
    服务端在回复消息的时候,也需要带上客户端的地址

    多道技术

    解决cpu在执行程序,遇到io时,不干活的情况
    时间上的复用(单个cpu的电脑上,起多个应用程序。cpu快速切换,给人的感觉是同时运行)
    空间上的复用(多个程序共一套硬件设备,它是多道技术实现时间上的复用的基础,不然还要去硬盘读数据)
    一个任务占用cpu时间过长或被操作系统强行剥夺走cpu的执行权限(比起串行效率反而降低)
    一个任务执行过程中遇到io操作,也会被操作系统强行剥夺走cpu的执行权限(比起串行效率提高)

    串行|并发

    串行:一个程序完完整整的运行完毕,才能运行下一个程序
    并发:看上去像同时运行

    进程理论

    程序:一堆代码
    进程:正在运行的程序
    进程是一个实体,每一个进程都有它自己独立的内存空间

    同步和异步:针对任务的提交方式

    同步:提交任务之后原地等待任务的返回结果,期间不做任何事!
    异步:提交任务之后,不等待任务的返回结果,执行运行下一行代码!

    阻塞与非阻塞:针对程序运行的状态

    阻塞:遇到io操作   >>> 阻塞态
    非阻塞:就绪或者运行态  >>> 就绪态,运行态

    互斥锁:锁千万不要随意去用

    会将并发变成串行,牺牲了效率但是保证了数据的安全
    锁一定要在主进程中创建,给子进程去用
    解决多个进程操作同一份数据,造成数据不安全的情况
    加锁会将并发变成串行
    锁通常用在对数据操作的部分,并不是对进程全程加锁
    一把锁不能同时被多个人使用,没有抢到的人,就一直等待锁释放

    生产者消费者模型

    生产者:生产数据(做包子的)
    消费者:处理数据(吃包子的)
    两者之间的通信介质:队列/管道
    供需不平衡:
        队列: 
            生产者生产的数据放到队列里面
            消费者去队列里面获取数据

    IPC机制

    进程间通信
        进程与进程之间是数据隔离的
        管道/队列(管道+锁)
        队列:先进先出
        堆栈:先进后出
        q.put()  放入值
        q.get()  获取队列里面的值(同一时刻只能有一个任务来队列中获取数据)
        两者在存放值和取值的时候都会出现阻塞的情况(队列满了,队列空了)

    线程理论

    把操作系统比喻成工厂
    进程:资源单位(工厂里面的车间)
    线程:执行单位(车间里面的流水线)
    任何一个进程都自带一个"主"线程
    进程中的线程数据是共享的,
    开起进程的开销要远远大于开启线程的开销
    开启进程:申请空间,拷贝代码都需要耗时
    开启线程:开销极小,几乎在代码执行的同时线程就已经创建

    线程之间数据共享

    线程之间数据共享
    多个线程操作同一份数据???出现数据不安全的情况
    涉及到多个线程或进程操作同一份数据的时候,通常都需要将并行并发变成串行
    虽然牺牲了效率但是提高了数据的安全性
    针对不同的数据,需要加不同的锁
    锁(独立卫生间)

    GIL全局解释器锁

    只在Cpython解释器中
    由于Cpython内存管理不是线程安全的!
    同一进程下的多个线程在同一时刻只能有一个线程被执行
    必须先抢解释器才能被cpu执行
    GIL是加在Cpython解释器上的一把锁,并不能保证数据的安全,想保证数据的安全,就必须加不同的锁

    python内存管理

    内存管理>>>垃圾回收机制
    1.引用计数
    2.标记清除
    3.分代回收

    死锁与递归锁

    即便你记住了每acquire一次就release一次的操作,也会产生死锁现象
    递归锁:可以连续的acquire(),每acquire()一次计数加一

    信号量

    如果把互斥锁比喻成独立卫生间,那么信号量就相当于多个卫生间,一个可以指定多个线程访问

    event事件

    event = Event()
            
    event.set()  # 告诉另外一个子线程 你可以运行了
            
    event.wait()  # 等待别人给我发set()信号

    socket服务端实现并发

    固定的ip和port
    24小时提供服务
    能够实现并发

    进程池线程池

    线程不可能无限制的开下去,总要消耗和占用资源
    
    进程池线程池概念:硬件有极限,为了减轻硬件压力,所以有了池的概念
    池:
        为了减缓计算机硬件的压力,避免计算机硬件设备崩溃
        虽然减轻了计算机硬件的压力,但是一定程度上降低了持续的效率
    进程池线程池:
        为了限制开设的进程数和线程数,从而保证计算机硬件的安全
    
    - concurrent.futures模块导入
    - 线程池创建(线程数=cpu核数*5左右)
    - submit提交任务(提交任务的两种方式)
    - 异步提交的submit返回值对象
    - shutdown关闭池并等待所有任务运行结束
    - 对象获取任务返回值
    - 进程池的使用,验证进程池在创建的时候里面固定有指定的进程数
    - 异步提交回调函数的使用

    协程,io密集型会提高效率

    - 进程:资源单位
    - 线程:执行单位
    - 协程:单线程下实现并发(能够在多个任务之间切换和保存状态来节省IO),这里注意区分操作系统的切换+保存状态是针对多个线程而言,而我们现在是想在单个线程下自己手动实现操作系统的切换+保存状态的功能
    
    协程这个概念完全是程序员自己想出来的东西,它对于操作系统来说根本不存在。操作系统只知道进程和线程。
    注意:
        并不是单个线程下实现切换+保存状态就能提升效率,因为你可能是没有遇到io也切,那反而会降低效率

    实现高并发的原理

    将单个线程的效率提升到最高,多进程下开多线程,多线程下用协程>>> 实现高并发!!!

    协程实现服务端客户端通信

    链接和通信都是io密集型操作,我们只需要在这两者之间来回切换其实就能实现并发的效果
    服务端监测链接和通信任务,客户端起多线程同时链接服务端
    相关文章
    相关标签/搜索
    www930.com三期必中 哈巴河县| 怀化市| 双峰县| 彰化县| 常熟市| 南川市| 南投市| 清远市| 聂荣县| 西昌市| 儋州市| 青河县| 通海县| 崇阳县| 商丘市| 兴化市| 二手房| 大悟县| 基隆市| 丽水市| 高州市| 越西县| 元江| 塔河县| 馆陶县| 都江堰市| 隆德县| 昌吉市| 垦利县| 治多县| 德江县| 利辛县| 临泽县| 包头市| 巧家县| 米泉市| 永平县| 镇雄县| 英德市| 汝南县| 定远县| 铁岭县| 丰台区| 周至县| 西平县| 鸡西市| 元阳县| 双鸭山市| 锡林浩特市| 三河市| 喀喇沁旗| 新源县| 连云港市| 瑞丽市| 泸西县| 北碚区| 九龙县| 吉首市| 林口县| 崇礼县| 克拉玛依市| 托克逊县| 伊宁市| 永兴县| 土默特右旗| 囊谦县| 靖安县| 通海县| 马公市| 武川县| 英吉沙县| 醴陵市| 阳新县| 讷河市| 逊克县| 景宁| 梨树县| 遂平县| 唐海县| 平果县| 太保市| 将乐县| 呈贡县| 山阳县| 交口县| 台前县| 平顶山市| 花莲县| 安多县| 凌云县| 都匀市| 永州市| 南京市| 天水市| 大理市| 金山区| 达孜县| 丰镇市| 沂南县| 二连浩特市| 大英县| 宝鸡市| 上思县| 汕尾市| 嵊州市| 沛县| 桂平市| 顺昌县| 视频| 丹阳市| 铜川市| 九龙坡区| 搜索| 道孚县| 湄潭县| 安康市| 托克逊县| 渭源县| 金华市| 公主岭市| 习水县| 镇康县| 宾阳县| 枣阳市| 尚志市| 宁陕县| 南漳县| 鄂托克旗| 长岛县| 博客| 新疆| 南陵县| 娄底市| 安顺市| 平谷区| 苗栗县| 柘城县| 呼伦贝尔市| 蒙阴县| 中卫市| 太康县| 昌乐县| 东至县| 中西区| 平原县| 礼泉县| 冀州市| 上犹县| 丹棱县| 府谷县| 车致| 阳西县| 昆明市| 万山特区| 越西县| 武冈市| 缙云县| 新蔡县| 香河县| 思茅市| 龙井市| 双柏县| 临漳县| 五常市| 沭阳县| 蒙城县| 瑞金市| 沙洋县| 星子县| 建瓯市| 台前县| 临清市| 扶余县| 榆林市| 宁海县| 丰原市| 孟州市| 湘西| 循化| 城固县| 鹿邑县| 外汇| 东山县| 晋江市| 珲春市| 霸州市| 巴青县| 百色市| 崇仁县| 西城区| 三亚市| 常宁市| 东宁县| 兴义市| 寿阳县| 柳江县| 政和县| 合水县| 南陵县| 嘉鱼县| 廉江市| 临清市| 吉安市| 沭阳县| 漯河市| 樟树市| 宁波市| 西青区| 桐梓县| 古田县| 临洮县| 永嘉县| 隆回县| 宝兴县| 通渭县| 环江| 贵南县| 达拉特旗| 隆德县| 新平| 龙门县| 胶州市| 临城县| 安多县| 桓台县| 河间市| 长顺县| 平阴县| 台南市| 桃源县| 西和县| 山西省| 沂源县| 施秉县| 定襄县| 邢台市| 蒙城县| 芜湖市| 房山区| 错那县| 来宾市| 宁都县| 达尔| 安庆市| 克拉玛依市| 沽源县| 毕节市| 麦盖提县| 瑞昌市| 宣威市| 积石山| 普兰县| 温宿县| 阿坝| 新干县| 勃利县| 西和县| 岳阳市| 青浦区| 宜君县| 长垣县| 松原市| 正阳县| 邢台市| 雷波县| 海伦市| 简阳市| 玛纳斯县| 布尔津县| 贡嘎县| 镶黄旗| 海宁市| 通州市| 中阳县| 定日县| 简阳市| 宜都市| 闽清县| 喀喇沁旗| 十堰市| 洪泽县| 澄迈县| 香河县| 淮北市| 尉氏县| 吴忠市| 和田县| 达孜县| 盈江县| 潞西市| 南部县| 邵阳县| 鸡东县| 环江| 太仓市| 伽师县| 九龙坡区| 张家口市| 民权县| 萝北县| 宜宾县| 故城县| 新郑市| 工布江达县| 桐城市| 建阳市| 海门市| 铜鼓县| 老河口市| 峡江县| 张家港市| 昌乐县| 黄山市| 万全县| 墨江| 镶黄旗| 宁明县| 洛阳市| 壶关县| 宜黄县| 会宁县| 贵溪市| 高青县| 谷城县| 永仁县| 台江县| 丹巴县| 武定县| 祁连县| 荔浦县| 苍南县| 金坛市| 西宁市| 金坛市| 扎囊县| 洪泽县| 封丘县| 天峻县| 利辛县| 许昌市| 四会市| 东方市| 镇远县| 南雄市| 通山县| 遂川县| 竹溪县| 德清县| 神池县| 息烽县| 安吉县| 临潭县| 增城市| 万山特区| 唐山市| 天台县| 沅江市| 峨山| 宕昌县| 朝阳市| 扬中市| 嘉善县| 达拉特旗| 历史| 珠海市| 阜新市| 涞源县| 云龙县| 岱山县| 台中县| 东兰县| 永和县| 德清县| 广东省| 贺兰县| 且末县| 邯郸市| 兴化市| 望奎县| 太湖县| 江西省| 阿城市| 牙克石市| 日土县| 惠东县| 浦城县| 霍城县| 黄梅县| 扬中市| 宜宾市| 襄垣县| 铜鼓县| 水城县| 石柱| 丰原市| 凌海市| 奈曼旗| 阿拉善左旗| 新野县| 开封县| 彭泽县| 丰县| 万山特区| 彭泽县| 遵化市| 江油市| 微山县| 旅游| 葫芦岛市| 长沙县| 华阴市| 吉木萨尔县| 合肥市| 韶关市| 雷波县| 科技| 酉阳| 杂多县| 呼图壁县| 博白县| 永嘉县| 南皮县| 合山市| 宝山区| 屯门区| 佛冈县| 汉沽区| 夏津县| 桑日县| 廊坊市| 东乡县| 嘉鱼县| 鲁甸县| 黄陵县| 噶尔县| 威信县| 确山县| 怀宁县| 武清区| 德昌县| 虹口区| 宁陕县| 龙口市| 榆中县| 福清市| 博罗县| 博湖县| 河北区| 秦皇岛市| 大庆市| 蚌埠市| 赣榆县| 太仓市| 阳谷县| 霍邱县| 辽阳县| 遵化市| 泌阳县| 福鼎市| 绥化市| 山西省| 仙桃市| 平山县| 织金县| 彩票| 任丘市| 铜山县| 樟树市| 商城县| 长垣县| 富源县| 会理县| 隆昌县| 兴安县| 富源县| 巴林左旗| 铜梁县| 余姚市| 泸西县| 灌云县| 伊宁市| 黄冈市| 陕西省| 汉沽区| 乌审旗| 望江县| 昌邑市| 石渠县| 金堂县| 始兴县| 常宁市| 文成县| 寿阳县| 乌鲁木齐县| 土默特左旗| 和顺县| 文山县| 郎溪县| 乃东县| 启东市| 武胜县| 丰台区| 滨海县| 永丰县| 汝南县| 隆安县| 团风县| 庐江县| 明光市| 正镶白旗| 金平| 万盛区| 成武县| 虎林市| 梓潼县| 洮南市| 林甸县| 镇康县| 阿巴嘎旗| 潮安县| 大连市| 潜山县| 永善县| 扎赉特旗| 彭泽县| 吉水县| 夹江县| 剑阁县| 万盛区| 云浮市| 安阳县| 青浦区| 平安县| 高州市| 祁东县| 扶余县| 札达县| 衡阳县| 新闻| 山东| 莲花县| 文山县| 克拉玛依市| 永丰县| 黄山市| 渝北区| 简阳市| 宝鸡市| 大竹县| 遂川县| 铁力市| 读书| 安陆市| 贡山| 安乡县| 温州市| 当雄县| 响水县| 桑植县| 九寨沟县| 报价| 灵武市| 寿阳县| 新昌县| 镇江市| 明溪县| 启东市| 城市| 连平县| 南汇区| 织金县| 阿拉善左旗| 泾源县| 隆安县| 额敏县| 万安县| 砚山县| 伊通| 汉沽区| 苏州市| 曲阜市| 武胜县| 永平县| 雅江县| 苍溪县| 清水县| 隆化县| 无极县| 秦皇岛市| 北海市| 遂昌县| 太仆寺旗| 蓝田县| 肥城市| 布尔津县| 东安县| 晋州市| 垦利县| 改则县| 博野县| 丽水市| 攀枝花市| 长顺县| 阳春市| 云阳县| 洪湖市| 建瓯市| 台中县| 成都市| 屏东市| 常山县| 芦山县| 兴城市| 筠连县| 吴桥县| http://wap.pjqdqz.fit http://wap.nsldct.fit http://m.ywtbmx.fit http://m.viugug.fit http://rspxow.fit http://m.kylbkd.fit http://wap.yxoojk.fit http://wap.bm1961xissz.fit http://m.pvvmwt.fit http://www.peljcx.fit http://wap.guqnxw.fit http://www.sgvqdh.fit http://wap.nwsmza.fit http://m.ezovjy.fit http://tphobv.fit http://tyhlpr.fit http://m.rbhfvu.fit http://wap.ojscti.fit