• <object id="yucqg"></object>
  • <input id="yucqg"></input>
  • <input id="yucqg"><u id="yucqg"></u></input>
  • 网络编程遇到相关问题

    为什么出现粘包问题?

    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密集型操作,我们只需要在这两者之间来回切换其实就能实现并发的效果
    服务端监测链接和通信任务,客户端起多线程同时链接服务端
    相关文章
    相关标签/搜索
    美女六肖图马077 黄大仙精选资料三天肖三码 穆棱市| 密云县| 庆安县| 平邑县| 凤凰县| 河北省| 泌阳县| 西和县| 天全县| 琼海市| 依兰县| 清丰县| 南充市| 上林县| 苗栗市| 田东县| 克什克腾旗| 温泉县| 沂源县| 永寿县| 宝应县| 琼海市| 贺州市| 佛坪县| 环江| 通山县| 南安市| 广平县| 舟曲县| 孟州市| 棋牌| 延津县| 大埔区| 定远县| 临猗县| 肇源县| 鸡泽县| 平阳县| 海伦市| 静海县| 宜川县| 迭部县| 皮山县| 龙山县| 曲周县| 建宁县| 县级市| 蒙城县| 灵璧县| 若尔盖县| 朝阳县| 井陉县| 定西市| 名山县| 百色市| 金山区| 镇宁| 武定县| 扎兰屯市| 萨嘎县| 怀远县| 双牌县| 桃园市| 定远县| 苍梧县| 子洲县| 师宗县| 石首市| 南昌市| 葫芦岛市| 淮阳县| 上杭县| 连云港市| 浦县| 南康市| 阿图什市| 古浪县| 长乐市| 清远市| 融水| 桐城市| 东宁县| 商都县| 安徽省| 山东| 综艺| 苗栗县| 浦县| 新蔡县| 霍邱县| 名山县| 嘉兴市| 威海市| 雅江县| 岗巴县| 兴海县| 张掖市| 乃东县| 五华县| 江津市| 庆元县| 青海省| 新化县| 昌宁县| 海兴县| 南漳县| 体育| 金沙县| 天峻县| 乐陵市| 宜宾市| 望谟县| 县级市| 昆明市| 潮州市| 洪江市| 丰县| 沛县| 灵丘县| 万宁市| 古交市| 四会市| 玉门市| 绥棱县| 浙江省| 海阳市| 临沂市| 濮阳市| 普宁市| 赤壁市| 镇坪县| 鱼台县| 无为县| 囊谦县| 阳西县| 和平区| 淳安县| 射洪县| 娱乐| 麻城市| 古蔺县| 濮阳市| 郑州市| 屏山县| 虞城县| 文成县| 姜堰市| 铜山县| 大埔区| 堆龙德庆县| 云梦县| 阿图什市| 和硕县| 本溪| 巴林左旗| 石屏县| 夏河县| 吉隆县| 昭通市| 兴文县| 武邑县| 镇沅| 东莞市| 湖口县| 沛县| 鄄城县| 伽师县| 清水河县| 阳曲县| 利津县| 营山县| 宜州市| 麟游县| 斗六市| 高清| 池州市| 顺义区| 大英县| 屏南县| 彰化县| 湖南省| 屯门区| 永泰县| 米泉市| 怀来县| 遂川县| 华容县| 北碚区| 梁河县| 屯门区| 南宫市| 巴青县| 云阳县| 大宁县| 江门市| 尉氏县| 云林县| 武城县| 安仁县| 梁河县| 云霄县| 宁化县| 武陟县| 永福县| 黔江区| 咸丰县| 余姚市| 满洲里市| 河南省| 尖扎县| 顺昌县| 资阳市| 荥阳市| 游戏| 九寨沟县| 马山县| 安康市| 乌什县| 香河县| 香河县| 通辽市| 二手房| 沙湾县| 文山县| 沙洋县| 滁州市| 五家渠市| 张家口市| 浮梁县| 柳江县| 东海县| 平乐县| 得荣县| 略阳县| 英德市| 江津市| 湄潭县| 晋宁县| 曲阜市| 邓州市| 泰兴市| 琼结县| 永福县| 赞皇县| 章丘市| 陇川县| 清水河县| 讷河市| 周宁县| 宜丰县| 广元市| 彝良县| 托里县| 大名县| 澎湖县| 眉山市| 正阳县| 常熟市| 兴文县| 安远县| 平凉市| 赣州市| 鹿泉市| 肥城市| 泸州市| 陆川县| 营山县| 临夏市| 关岭| 荆门市| 永兴县| 衢州市| 呼图壁县| 兰西县| 宣武区| 巫溪县| 焦作市| 双辽市| 万源市| 万全县| 杭锦后旗| 东乡| 镇远县| 仁寿县| 五指山市| 固镇县| 来安县| 拜泉县| 枣强县| 米脂县| 无为县| 乌苏市| 莱芜市| 安康市| 辉南县| 都江堰市| 玉门市| 招远市| 广宁县| 兰坪| 黎平县| 富源县| 乐平市| 北票市| 尚义县| 金昌市| 丹巴县| 长宁区| 吴旗县| 安福县| 阳东县| 宝坻区| 莱西市| 安顺市| 高雄市| 静宁县| 定兴县| 高阳县| 夏河县| 华坪县| 信丰县| 台山市| 克山县| 高台县| 海伦市| 白朗县| 大石桥市| 曲水县| 新干县| 青龙| 紫阳县| 喀喇| 扎囊县| 大港区| 延吉市| 蒙阴县| 荣成市| 崇明县| 昌平区| 江川县| 五河县| 宜良县| 光泽县| 马尔康县| 温宿县| 阜平县| 县级市| 武清区| 建湖县| 盱眙县| 平和县| 凤台县| 晋江市| 富裕县| 常州市| 司法| 柳江县| 屏山县| 抚远县| 积石山| 封丘县| 卢湾区| 茌平县| 景宁| 崇文区| 新河县| 土默特左旗| 龙南县| 呼玛县| 安国市| 通州市| 喀喇沁旗| 亚东县| 宁化县| 敖汉旗| 英吉沙县| 洞口县| 滨海县| 修文县| 滦南县| 青岛市| 延长县| 台南县| 出国| 友谊县| 井陉县| 长春市| 新竹县| 红原县| 海原县| 万源市| 新安县| 泽库县| 怀远县| 报价| 安泽县| 县级市| 庆元县| 宜丰县| 江门市| 富民县| 西安市| 新巴尔虎左旗| 大田县| 阿坝| 肇东市| 亚东县| 瑞安市| 台东县| 和平县| 焉耆| 芷江| 镶黄旗| 恩施市| 乌苏市| 靖宇县| 黎川县| 永川市| 渝中区| 鄯善县| 榆中县| 杭锦旗| 榆林市| 靖西县| 丹阳市| 平泉县| 桂阳县| 邮箱| 金湖县| 纳雍县| 彰化市| 秦皇岛市| 沭阳县| 东乡县| 济源市| 江油市| 剑川县| 璧山县| 安义县| 仙游县| 太仓市| 丰原市| 荥经县| 当阳市| 库伦旗| 漳平市| 东源县| 高雄县| 岳普湖县| 额尔古纳市| 文山县| 措勤县| 托克逊县| 皮山县| 陕西省| 镶黄旗| 德令哈市| 桂平市| 定陶县| 大安市| 阳原县| 桃源县| 公主岭市| 蕲春县| 房山区| 祁东县| 和龙市| 阜南县| 新野县| 中方县| 都江堰市| 大关县| 道孚县| 兴山县| 和龙市| 黔西| 兰考县| 额尔古纳市| 大名县| 隆安县| 伊春市| 绥德县| 靖宇县| 湛江市| 垫江县| 印江| 大竹县| 拉萨市| 伊宁市| 宜兰县| 康马县| 沙坪坝区| 古田县| 辽阳市| 伊宁县| 岑溪市| 广灵县| 九江县| 广汉市| 黄浦区| 田林县| 久治县| 新晃| 仁布县| 乌兰县| 台北市| 兴义市| 济源市| 泰宁县| 阿鲁科尔沁旗| 左云县| 汶川县| 乌海市| 波密县| 六安市| 田阳县| 屏边| 肃南| 神木县| 临洮县| 嵊泗县| 金湖县| 东阳市| 黑河市| 车险| 高唐县| 靖宇县| 六盘水市| 静海县| 天等县| 瓦房店市| 武定县| 上犹县| 达孜县| 睢宁县| 华阴市| 怀仁县| 武邑县| 平湖市| 布拖县| 金川县| 师宗县| 姚安县| 东海县| 达孜县| 高唐县| 伊金霍洛旗| 博客| 洪雅县| 泉州市| 吉木乃县| 江山市| 甘肃省| 凉城县| 金乡县| 红桥区| 平定县| 友谊县| 松江区| 马边| 湘潭市| 五河县| 和田市| 英山县| 肇州县| 英吉沙县| 邹平县| 靖州| 鄂伦春自治旗| 苍梧县| 广河县| 饶阳县| 五常市| 巴南区| 湾仔区| 延吉市| 漳平市| 秦皇岛市| 岫岩| 鹤壁市| 安新县| 凤庆县| 南康市| 天津市| 营山县| 梨树县| 泗水县| 会泽县| 离岛区| 盱眙县| 泗洪县| 涡阳县| 通化市| 盐城市| 沛县| 永登县| 民权县| 文水县| 宜川县| 平昌县| 芜湖市| 梁平县| 南安市| 噶尔县| 常州市| 石门县| 富平县| 阿勒泰市| 将乐县| 金门县| 象山县| 威海市| 吴江市| 南开区| 贵南县| http://wap.oyhwmv.fit http://oidpjw.fit http://m.atmvnk.fit http://m.tguiia.fit http://wap.tcgbrq.fit http://wap.kssayi.fit http://wap.ldbqpj.fit http://wap.vqrcbk.fit http://wap.eseset.fit http://wap.xtrohv.fit http://wap.tdcjum.fit http://m.arggcg.fit http://wap.cymozf.fit http://m.ucqrfk.fit http://m.ckuzgt.fit http://www.zwvaco.fit http://www.stblss.fit http://syvvag.fit