网络编程基础知识之单线程与多线程

程序、进程、线程

  程序通俗地说就是由源代码生成的可执行应用。

  进程就是当一个程序开始运行时,它就是一个进程。进程包括运行中的程序和程序所使用到的内存和系统资源。即进程包括该程序以及运行该程序所需要的内存和资源(如CPU)。一个进程是由一或多个线程组成,进程只负责资源(如CPU)的调度和分配,线程才是真正执的执行单元,使用进程给予的资源进行处理操作。

  线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的。即不同的线程可以执行同一份代码段。线程在整个程序运行的过程中是独立运行的,且线程和线程之间是透明的,即线程本身是不知道有其它线程存在的。

单线程

  每个正在运行的程序(即进程),至少包括一个线程, 这个线程叫做主线程。

  主线程在程序启动时被创建,用于执行main函数。

  只有一个主线程的程序,称之为单线程程序。

  主线程负责执行程序的所有代码,这些代码只能顺序执行,不能并发执行。

多线程

  多线程是指程序中包含多个执行流,即在一个程序中可以运行多个不同的线程来执行不同的任务,也就是说单个程序可以创建多个并行执行的线程来完成各自的任务。主线程之外的均为子线程,子线程和主线程都是独立的运行单元,各自的执行互不影响。

多线程的优点

  可以提高CPU的利用率。在多线程编程中,一个线程必须等待时,CPU可以运行其它的线程而不是处于等待过程中,这样可以极大提高程序的执行效率。

多线程的缺点

  线程也是程序的一部分,即线程也需要占用内存,线程越多占用的内存越多,非常依赖硬件的优劣。

  多线程需要协调和管理,即需要CPU时间跟踪线程。

  线程之间对共享资源的写操作会相互影响。

  线程过多会导致控制以及逻辑都太过复杂,最终出现很多Bug。

学习参考文章

点击跳转

网络编程基础知识之单线程与多线程相关推荐

  1. Java 网络编程基础知识

    Java 网络编程基础知识 基础概念 计算机网络的基本概念 ​ 网络:多台计算机使用网络设备互联在一起,计算机之间可以进行通信,这样就组成了一个计算机网络. ​ 网络设备:集线器(HUB),路由器,交 ...

  2. 多实例多进程网络编程PHP,php socket网络编程基础知识(四):多进程

    标签:status   传递   windows   返回   修改   队列   _for   响应   关联 说明 php在web编程时是不需要考虑多进程的,但整个php流程是涉及到多进程的,只不 ...

  3. Linux网络编程基础知识

    Linux网络编程基础知识 1. 协议的概念 1.1 什么是协议 1.2 典型协议 2 网络应用程序设计模式 2.1 C/S模式 2.2 B/S模式 2.3 优缺点 3 分层模型 3.1 OSI七层模 ...

  4. python网络编程基础知识_python网络编程基础

    一.客户端/服务器架构 网络中到处都应有了C/S架构,我们学习socket就是为了完成C/S架构的开发. 二.scoket与网络协议 如果想要实现网络通信我们需要对tcpip,http等很多网络知识有 ...

  5. 网络编程基础知识概括帮助你了解架框组成客户端服务端架构

    阅读目录 1.楔子 2.客户端/服务端架构 3.网络基础 4.套接字(socket)初使用 写python代码 你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分 ...

  6. 11.网络编程-基础知识 C++/Linux-2022-10-20

    linux网络编程 1.网络基础 网络应用程序设计模式 C/S - client/sercver 优点:1.协议选用灵活,2.可以缓存数据 缺点:用户安全,开发工作量大,调试困难 B/S - brow ...

  7. 网络编程基础知识(待更新补充)

    1.C/S架构(client/server) 即客户端(泛指客户端程序exe)与服务端架构 2.B/S架构(Browser/Server) 浏览器端与服务器端架构 3.广播 主机之间'一对所有'的通讯 ...

  8. 网络编程 -- 基础知识 流(输入流,输出流)

    1. 流 流是指通过一定的传播路径从源传递到目的地的字节序列.Java中的字节流分为输入流和输出流:输出流是指向目的地的写入的二进制序列,输入流是从数据源读取的二进制序列.网络编程的很大一部分工作都是 ...

  9. 网络编程基础知识详解

    什么是网络编程 网络编程的本质是两个设备之间的数据交换,当然,在计算机网络中,设备主要指计算机.数据传递本身没有多大的难度,不就是把一个设备中的数据发送给两外一个设备,然后接受另外一个设备反馈的数据. ...

  10. socket通信需要网线连接吗_socket网络编程基础知识篇

    网络通信是一种进程间通信(IPC, Inter-Process Communication),要求位于不同网络节点不同进程的通信双方必须遵循统一的通信协议方可实现.基于套接字(Socket)通信是应用 ...

最新文章

  1. Sqlserver:sp_recompile的副作用
  2. [数据库] Oracle单表查询总数及百分比和数据横向纵向连接
  3. webpack html转成js,WebPack的基础学习
  4. Path Sum I, II
  5. Android 系统(188)---Android开发:ListView、AdapterView、RecyclerView全面解析
  6. 第12章[12.8] Spring Boot+Ext JS 实现图形验证码
  7. [转]win7添加xp的快速启动栏
  8. Android游戏SQL注入,关于Android contentprovider sql注入问题
  9. arcgis建立拓扑关系
  10. vue 项目完美运行在IE或者360浏览器兼容模式下 踩坑笔记
  11. python click 函数
  12. java合并果子_【单调队列】合并果子
  13. html5学习17:定制input元素
  14. VRP远程管理(华为设备telnet登录密码配置与测试环境搭建)——在物理机上创建回环网卡及eNSP模拟器与物理机实现连接通信
  15. 如何查看磁盘空间是否够用
  16. 【一个故事讲完https】聊聊https的诞生
  17. css情景动画,css3中的动画属性animation应用场景及编写代码教程
  18. cad命令栏怎么调出来_期货文华软件K线图上随着最新价格跳动的黄虚线怎么调出来...
  19. 对勾函数_对勾函数的图像及其性质1.pptx
  20. 如果你已经掌握了 Python 101,那么你可能比 OpenAI 的原型 Codex 更擅长编程

热门文章

  1. 20191208_神经网络搭建_缺失值箱型图
  2. 让大家久等了,BERT推理加速终于开源了
  3. 我们真的搞懂这些排序算法了吗?(一)
  4. 【每日算法Day 78】面试经典题:能说出全部四种方法,不录用你都不可能!
  5. 深度学习2.0-19.随机梯度下降之可视化与实战
  6. MySQL主从原理,基于快速学习一门技术的3种方式
  7. NIO,一本难念的经——分布式系统基础
  8. 博文视点Open Party ——漏洞分析
  9. 5.1 RNN 情感识别、tensorflow实现——python实战
  10. TransformerEncoder