热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

socket套接字补充、操作系统发展史、进程

目录socket套接字之UDP协议操作系统的发展史手工操作批处理系统联机批处理系统脱机批处理系统多道技术进程理论并发与并行同步与异步阻塞与非阻塞同步异步与阻塞非阻塞总结socket

目录
  • socket套接字之UDP协议
  • 操作系统的发展史
    • 手工操作
    • 批处理系统
      • 联机批处理系统
      • 脱机批处理系统
  • 多道技术
  • 进程理论
  • 并发与并行
  • 同步与异步
  • 阻塞与非阻塞
  • 同步异步与阻塞非阻塞总结


socket套接字之UDP协议

在我们创建socket对象的时候,默认是使用TCP协议的,如果想要使用UDP协议,需要给个参数。

server = socket.socket(type=socket.SOCK_DGRAM)

如果使用了UDP协议,那么它的一些方法也会发生变化。

举例

服务端(Server)

import socket
server = socket.socket(type=socket.SOCK_DGRAM)
# 绑定ip地址和端口号不变
server.bind(('127.0.0.1', 8080))
# 接收消息的方法改变了,不与客户端进行连接就直接获取消息
msg, addr = server.recvfrom(1024)
print('来自客户端:', msg.decode('utf8'))
print('客户端地址:', addr)
# 发送消息的方法改变了,根据客户端地址发送
server.sendto('来自服务端的消息'.encode('utf8'), addr)

客户端(Client)

import socket
client = socket.socket(type=socket.SOCK_DGRAM)
# 可以先写个变量存储服务端地址,后续用起来方便
server_addr = ('127.0.0.1', 8080)
# 发送消息的方法改变了,根据服务端地址发送
client.sendto('来自客户端的消息'.encode('utf8'), server_addr)
# 接收消息的方法改变了,可以获取服务端的消息和地址
msg, addr = client.recvfrom(1024)
print('来自服务端:', msg.decode('utf8'))
print('服务端地址:', addr)

由于使用的是UDP协议,不会建立双向通道,所以可以启动多个客户端给服务端发送消息,服务端都会接收到,谁先发送消息服务端就会优先收到,并且使用UDP协议是不会发生黏包问题的。


操作系统的发展史

手工操作

程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数据输入计算机内存,接着通过控制台开关启动程序针对数据运行;计算完毕,打印机输出计算结果;用户取走结果并卸下纸带(或卡片)后,才让下一个用户上机。

image

image

优点:用户独占全机,不会出现因资源已被其他用户占用而等待的现象。

缺点:CPU的利用不充分,资源的利用率低。


批处理系统

批处理系统:加载在计算机上的一个系统软件,在它的控制下,计算机能够自动地、成批地处理一个或多个用户的作业(这作业包括程序、数据和命令)。


联机批处理系统

主机与输入机之间增加一个存储设备——磁带,在运行于主机上的监督程序的自动控制下,计算机可自动完成:成批地把输入机上的用户作业读入磁带,依次把磁带上的用户作业读入主机内存并执行并把计算结果向输出机输出。完成了上一批作业后,监督程序又从输入机上输入另一批作业,保存在磁带上,并按上述步骤重复处理。

image

优点:不停地处理各个作业,从而实现了作业到作业的自动转接,减少了作业建立时间和手工操作时间,提高了计算机的利用率。

缺点:在作业输入和结果输出时,主机的高速CPU仍处于空闲状态,等待慢速的输入/输出设备完成工作


脱机批处理系统

为克服与缓解高速主机与慢速外设的矛盾,在联机批处理系统的基础上增加一台不与主机直接相连而专门用于与输入/输出设备打交道的卫星机。

image

优点:主机不是直接与慢速的输入/输出设备打交道,而是与速度相对较快的磁带机发生关系,有效缓解了主机与设备的矛盾。主机与卫星机可并行工作,二者分工明确,可以充分发挥主机的高速计算能力。

缺点:每次主机内存中仅存放一道作业,每当它运行期间发出输入/输出(I/O)请求后,高速的CPU便处于等待低速的I/O完成状态,致使CPU空闲。

脱机批处理系统就是现代计算机核心部件的雏形。

总结:操作系统的发展史其实就是提升CPU利用率的过程


多道技术

首先多道技术的目的是为了提升CPU利用率,降低程序等待时间。

串行

在没有使用多道技术时,程序的执行是串行的——多个任务排队执行,上一个任务结束时才开始执行下一个任务,总耗时就是多个任务完整时间叠加。

image

多道

使用了多道技术后,计算机内存中会同时存放几道相互独立的程序,在一个程序执行过程中,利用空闲提前准备,缩短总的执行时间并且还能提高CPU利用率。

CPU在两种情况下会被拿走:



  1. 程序遇到IO操作,CPU自动切走运行其他程序。

  2. 程序长时间占用CPU,系统发现之后也会强行切走CPU,保证其他程序也可以使用。

image


进程理论

程序是一堆没有被执行的代码(死的),进程是正在运行的程序(活的)。有了进程这个概念就可以更加精确的描述出一些实际状态。

进程调度算法发展史

1.先来先服务

那个程序先执行就会先运行完这个程序,然后再去执行下一个,如果第一个进程需要100h才能执行完毕,那么第二个进程就需要等待100h,所以这个算法对短作业不太友好。

2.短作业优先

会优先执行那些耗时短的进程。如果短作业有好几个,长作业就会到最好执行,所以对长作业不太友好。

3.时间片轮转法与多级反馈队列

时间片轮转法:先公平的将CPU分给每个人执行。

多级反馈队列:根据作业长短的不同再合理分配CPU执行时间。

image

总的来说,进程调度算法的目的就是为了能够让单核的计算机也能够做到运行多个程序。


并发与并行

并发

并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

简单的来说就是程序看上去像同时在执行就可以称之为是并发。

image

并行

并行是指在同一个时间段内,两个或多个程序执行,有时间上的重叠,必须同一时间同时运行才可以称之为并行。单核计算机肯定不能实现并行,必须要有多个CPU才能实现并行的效果。

image

拓展:高并发与高并行

高并发:如果我说我们写的软件可以支持1个亿的并发量,那么一个亿的用户来了之后都可以感觉到自己被服务着。

高并行:如果我说我们写的软件可以支持1个亿的并行量,这种明显是不可能的,这句话的言外之意就是计算机有一亿个CPU,这是目前做不到的。


同步与异步

同步指的是提交完任务之后原地等待任务的返回结果,期间不做任何事情。比如我喊你吃饭,你没有听到我就一直喊,喊道你回应我为止。

异步指的是提交完任务之后不愿地等待任务的结果,直接去做其他事情,有结果自动提醒。比如我喊你吃饭,我就去饭店了,不管你来不来。


阻塞与非阻塞

一个进程是有着三个状态的。

image

就绪态:程序之进入运行态之前肯定要处于就绪状态。

运行态:程序被CPU执行着。

阻塞态:程序执行过程中有IO操作,程序会等待。

阻塞就是处于阻塞态,非阻塞就是处于就绪态和运行态,所以如果想要尽可能的提升程序执行效率,就要想办法让我们的程序一直处于就绪态和运行态,就是不要有IO操作。


同步异步与阻塞非阻塞总结

同步异步是用来描述任务的提交方式,阻塞非阻塞是用来描述任务的执行状态,所以我们可以结合出四种情况:

同步阻塞:相当于在银行排队办理业务,期间不做任何事。

同步非阻塞:相当于银行排队办理业务,期间喝水吃东西,但是人还在队列中

异步阻塞:相当于通过银行叫号方式等待办理业务,等待时在椅子上坐着,但是不做任何事。

异步非阻塞:相当于通过银行叫号方式等待办理业务,等待时在椅子上坐着,期间喝水吃东西办公。这个状态就是程序运行的极致。



推荐阅读
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文总结了在SQL Server数据库中编写和优化存储过程的经验和技巧,旨在帮助数据库开发人员提升存储过程的性能和可维护性。 ... [详细]
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 如何利用Java 5 Executor框架高效构建和管理线程池
    Java 5 引入了 Executor 框架,为开发人员提供了一种高效管理和构建线程池的方法。该框架通过将任务提交与任务执行分离,简化了多线程编程的复杂性。利用 Executor 框架,开发人员可以更灵活地控制线程的创建、分配和管理,从而提高服务器端应用的性能和响应能力。此外,该框架还提供了多种线程池实现,如固定线程池、缓存线程池和单线程池,以适应不同的应用场景和需求。 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • C#中实现高效UDP数据传输技术
    C#中实现高效UDP数据传输技术 ... [详细]
  • 网络通信基础:互联网协议(IP)详解
    互联网协议(IP)作为TCP/IP协议栈的核心组成部分,主要负责提供一种无连接且不可靠的数据包传输服务。这意味着IP并不确保数据包能够成功抵达目标地址,而是尽力而为地进行传输。此外,IP协议在数据传输过程中不维护任何连接状态,每个数据包独立处理,确保了网络的高效性和灵活性。 ... [详细]
  • 西北工业大学作为陕西省三所985和211高校之一,虽然在农业和林业领域不如某些顶尖院校,但在航空航天领域的实力尤为突出。该校的计算机科学专业在科研和教学方面也具有显著优势,是考研的理想选择。 ... [详细]
  • 精英荟萃:2019年全球互联网通信云大会讲师阵容揭晓
    随着5G标准的落地和物联网技术的创新应用,通信云正在不断推动着人们日常沟通与协作方式的变革,如何通过技术来引导通信云的持续发展,如何将前沿技术应用落地于各行业场景?近日,全球领先的 ... [详细]
  • 【Linux332】LVS的DR配置详解(ipvsadm+arptables)
    文章目录1.DR简 ... [详细]
  • 第五章5.4安全设备防火墙防火墙是网络关联的重要设备,用于控制网络之间的语言。外部网络用户的访问必须先经过安全策略过滤,而内部网络用户对外部网络的访 ... [详细]
  • 1、Ipv4只能用于内网,外网只能用2、DNS:把域名解析成ip地址3、MAC地址就是物理地址(网卡序列号)   IP地址:电脑序列号4、不同电脑,微信之间互相通信,靠的是端口;  ... [详细]
  • 网络编程:其实就是在学socketsocket是什么?翻译过来称为套接字是对底层的TCPIPUDP等网络协议进行封装使得上层的应用程序开发者,不用直接接触这对复杂,丑陋的协议在程序 ... [详细]
author-avatar
白羊幸福的佳佳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有