多线程开发和Socket技术

一、进程和线程

进程:每个应用程序对应一个进程;

线程:一个进程至少包含一个线程,线程要和CPU进行交互。

多线程并发(可以理解为):"同一时间"执行多件事情,如程序一边执行,一边计数(计时);如人一边吃饭,一边看电视。

多线程并发的本质,其实并不是CPU"同时"执行多件事情,而是在不停的切换,执行一段时间事件A,切换,执行一段时间事件B;再切换,再执行一段时间事件A,如此往复,因为CPU处理速度非常快,电脑的使用者感觉不到,所以看起来就像是在同时执行多件事情。

线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。

多线程是指程序中包含多个程序执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务(代码),也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。

一个进程会创建一个默认线程,即主线程,也就是UI线程。

多线程的优点

1.让计算机"同时"做多件事情,节约时间;

2.后台运行程序,提高程序的执行效率,也不会使主界面(UI线程)出现无响应的情况;

3.多线程可以让一个程序"同时"执行多件事情;

4.计算机CPU大部分时间处于空闲状态,避免浪费了CPU资源。

二、.Net中如何实现多线程

1.为线程执行一个方法(线程肯定要执行一段代码),这个方法中的代码就是该线程运行时要执行的代码(找一个人来做一件事)

产生一个线程的4个步骤:

1.编写该线程所要执行方法的代码

2.引用System.Threading命名空间

3.实例化Thread类,并传入一个指向线程所要运行方法的委托。(这时候线程已经产生,但还没有运行)

4.调用Thread实例的start()方法,标记该线程可以被CPU执行了,但具体执行时间由CPU决定。

三、前台线程和后台线程

前台线程:只有所有的前台线程都关闭才能完成程序关闭的线程;

后台线程:只要所有的前台线程结束,后台线程自动结束。

将一个线程设置为后台线程的方法:

Thread.IsBackground = true;

线程可以执行

1.不带参数的委托(无传入参数)

ThreadStart();

2.传入带参数的委托

ParameterizedThreadStart(object);

传入参数类型为object,理论上可以传任意的集合、列表和数组等。

例子:

定义一个执行循环任务的方法:

void CountNum()
{DateTime beginTime = DateTime.Now;for (int i = 0; i < 999999999; i++){//故意留空
    }TimeSpan ts = DateTime.Now.Subtract(beginTime);MessageBox.Show("循环执行完毕,用时:" + ts.TotalMilliseconds);
}//在多线程button的click事件中
Thread thread = new Thread(CountNum);
thread.IsBackground = true; //标记该线程为后台线程(前台线程结束后停止运行)
thread.Start();

四、套接字Socket

1.socket的英文原意是"孔"或"插座"。作为进程通信机制,取后一种意思。通常也成为"套接字",用于描述IP地址和端口,是一种通信链的句柄。(其实就是2个程序通信用的)

2.socket非常类似于电话插座。以电话网为例,电话的通话双方都相当于相互通信的2个程序,电话号码就是IP地址。任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的电话号码,相当于对方有一个固定的socket;然后双方拨号呼叫,相当于发出连接请求。加入对方在场并空闲,拿起电话听筒,双方就可以正式通话了,相当于连接成功。双方通话的过程中,是一方向电话机发出信号和对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后,一方挂断电话相当于关闭socket,撤销连接。

3.在Internet上有许多主机,运行多个服务软件,同时提供几种服务,每种服务都打开一个socket,并绑定到一个端口上,不同的端口对应不同的服务(应用程序)。

例如:http使用80端口,ftp使用21端口,smtp使用23端口。

4.socket传递数据主要有2中类型:

  • 流式socket(STREAM)

是一种面向连接的socket,针对于面向连接的TCP服务应用,安全,但是效率低。

  • 数据报式socket报文(DATAGRAM)

是一种无连接的socket,对应于无连接的UDP服务应用,不安全(丢失、顺序混乱,在接收端要分析重排及要求重发),但效率高。

5.Socket一般应用模式(服务端和客户端交互)

三次握手的过程。

6.socket的通讯过程

Socket操作相关类和方法

--EOF--

多线程和Socket——在线聊天室相关推荐

  1. JAVA利用多线程和Socket制作GUI界面的在线聊天室

    目录 前言 功能设计 GUI画面展示 服务器端 客户端 私聊窗口 主要代码 服务器端 客户端 其它代码 打包成jar 打包成exe文件 如何让其它电脑访问聊天室? 最后 前言 最近刚好是期末,碰上Ja ...

  2. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-完整应用例子-在线聊天室系统-代码解析...

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台.Net Socket通信框架-介绍一文之中我们对AgileEAS.NET S ...

  3. Unity联网之使用Socket简单实现多人在线聊天室(一)

    「前言」 之前在一直在写lua联网等一些知识,虽然lua重要,但C#联网也必不可少是吧.所以呢,本篇博客就主要介绍如何使用Unity和C#在实现多人在线聊天室. 服务器 客户端工作原理:(通过消息类型 ...

  4. JAVA实现在线聊天室(层层递进)

    - 本文讲述了从实现单个多个客户的收发信息(基础简易版),到各种实现代码的封装(oop版),实现群聊(群聊过渡版),到最后实现私聊(终极版)的过程 - 本文内容是在初步学习网络编程时,练习强化记忆时的 ...

  5. Python在线聊天室(windows)

    Python在线聊天室(windows) 1.:准备系统参数配置模块 (settings.py) #服务器地址 HOST = 'localhost' #服务器端口 PORT = 9999 #服务器管道 ...

  6. 第三章、C#简单界面在线聊天室C#一对多聊天(使用TCP转发实现的在线聊天室,文章末尾附免费项目资源)

    C#网络通信系列学习笔记 第一章.C#最简单的控制台网络通信&C#最简单的控制台socket通信 第二章.C#控制台实现一对一聊天&C#socket类的简单封装 第三章.C#简单在线聊 ...

  7. 【java毕业设计】基于java+原生Sevlet+socket的聊天室系统设计与实现(毕业论文+程序源码)——聊天室系统

    基于java+原生Sevlet+socket的聊天室系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+原生Sevlet+socket的聊天室系统设计与实现,文章末尾附有本毕业设 ...

  8. Java网络编程,使用Java实现UDP和TCP网络通信协议,以及基于UDP的在线聊天室。

    文章目录 前言 一.网络编程概念 1.网络 2. 网络编程的目的 3.想要达到这个效果需要什么 4.网络分层 二.网络编程Java类 1.IP地址:InetAddress 2.端口 3.TCP连接 3 ...

  9. rudesocket如何使用_[WebSocket入门]手把手搭建WebSocket多人在线聊天室(SpringBoot+WebS...

    前言 本文中搭建了一个简易的多人聊天室,使用了WebSocket的基础特性. 源代码来自老外的一篇好文: 本文内容摘要: 初步理解WebSocket的前后端交互逻辑 手把手使用 SpringBoot ...

最新文章

  1. 分享:Python fabric实践操作
  2. Matlab中cq是什么,Matlab中gradient函数(梯度计算原理)
  3. paypal创建订单后怎么获得id_5步创建Facebook商店(最新版教程)学习如何在Facebook上卖货...
  4. python的moviepy库 打包 报错: ‘moviepy.audio.fx.all‘ has no attribute ‘audio_fade 的解决办法
  5. 复旦博士用130行代码搞定核酸统计,2分钟解决人工一小时工作量
  6. java中bash应用_在bash脚本中查找java应用程序的进程ID(以查看目标应用程序是否已在运行)...
  7. Rabbitmq工作笔记009---access to vhost ‘/‘ refused for user 权限问题
  8. 面向对象淡入淡出轮播图(附带面向过程)
  9. 20180104 wdcp中的mysql重启不成功
  10. 从零开始学安全(二十三)●用PHP编写留言板
  11. codeforces Roud499Div2 B和C
  12. 基于单片机控制的电动智能小车
  13. 英语单词速记(一直更新中......)
  14. 【困难】数字迷宫,找到迷宫中的单词。
  15. Endnote X9.1 参考文献悬挂缩进
  16. 多场景业务实战-AB测试实战(数据分析干货!!!!!)
  17. 一场美好的婚礼对女孩子来说意味着什么?
  18. js 实现input框或textarea的文本复制功能
  19. php 生成图片带二维码,并且强制用户下载
  20. Github如何回滚代码?

热门文章

  1. linux设置用户密码、查看linux用户信息、root用户管理普通用户(passwd命令使用)
  2. spring下redis开发环境搭建
  3. 【持久化框架】Mybatis简介与原理
  4. 用脚本批量执行redis命令
  5. Activity的使用(四):两个activity的交互
  6. 创建对象的方式以及call,apply,bind的区别
  7. iOS开发-NSArray
  8. ADPLUS使用配置文件设置断点时无法创建DUMP文件原因分析
  9. 简单排序:直接插入排序
  10. (15)javaScript入门