.net网络编程 1.多线程

一 前言

1.为什么网络编程要用到多线程?

     在网络编程中经常会遇到网络阻塞或者网络等待等情况,处理这些情况就会等待很长时间,如可不加多线程处理就会出现执行时间过长,容易出现错误,反应迟钝等等状况,使用多线程后就会大大提高程序的健壮性和伸缩新性能。

2.进程和线程的区别

  一个程序至少有一个进程,形象点说,你开QQ就是打开了一个进程,但是你还要同时和到几个人聊天,打开好几个聊天窗口,每个聊天窗口就是一个线程,(所以同一进程可以划分为若干个线程,每个线程都有自己的寄存器等等,但是代码区是共享的)

 

二 多线程基础

     在学习多线程寄基础前,先给大家一个基础的宏观的概念,在这部分分为8个部分:

    1.启动线程   2.终止线程  3.合并线程  4.线程休眠  5.线程优先级   6.同步   7.线程池应用

    线程的应用用到了Thread类   他的主要方法有:

    1.Abort         终止线程

    2.Interrupt   中断线程

  3.join            阻塞调用线程,直到某个线程终止时为止

  4.Sleep     睡眠

先来上的简单的例子:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            Thread thread = new Thread(new ThreadStart(() => {
                while (true)
                {
                    Thread.Sleep(100);
                    Console.WriteLine("111");
                }
            }));
            thread.Start();    //启动线程
            //thread.Interrupt();  //中断线程  会抛出异常
            //thread.Abort();      //终止线程  

            Thread.Sleep(2000);  //主线阻塞2s

            thread.Suspend();   //线程挂起

            Thread thread2 = new Thread(new ThreadStart(() =>
            {
                //thread.Start();   //这里有异常 [线程正在运行或被终止;它无法重新启动。]
                //为什么这里会报错呢?  如果想开始重新启动一个现有的进程 只能将之前的挂起 然后继续执行
                //或者重新New一个thread对象
                thread.Resume();    //唤醒挂起的线程
                while (true)
                {
                    Thread.Sleep(100);
                    Console.WriteLine("222");
                }
            }));

            thread2.Start();    //启动线程2

            Console.ReadLine();
        }
    }
}

  

 

时间: 2024-10-31 21:25:52

.net网络编程 1.多线程的相关文章

网络编程三---多线程/进程解决并发问题

前文列出的代码给大家展示了一个最简单的网络程序,但正如文章末尾所提的,这个最简单的网络程序最大的缺点是服务端一次只能服务一个客户端,就比如说你去吃饭,饭店只有一个服务员, 而且服务员在客户离开之前只能为一个客户服务,也就是说你只能等待你前面的客户吃好饭离开了,然后你才能进去吃饭,而在你吃饭的时候时候,你后面来的人都得等你吃完饭才能轮到你后面一个人吃饭.这种模式的缺点很明显,因为在你进去点好菜到买单前的这段时间,这个服务员都是空闲的,为什么不让服务员在这个空闲时间让其他客户进来服务员为他点菜呢?在

网络编程和多线程面试相关

1.    简述 OSI 七层协议.    OSI:开发系统互联模型,是国际化标准组织(ISO)制定的为开放式互联信息系统提供了一种功能框架.    从低到高:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层    目的:是为异种计算机互连提供一个共同的基础和标准框架,并为保持相关标准的一致性和兼容性提供共同的参考    物理层功能:1.为数据端设备提供数据通路,通路即是媒介(网线,光纤)                2.传输数据        中继器,集线器,双绞线        

【Python网络编程】多线程聊天软件程序

课程设计的时候制作的多线程聊天软件程序 基于python3.4.3 import socket import pickle import threading import tkinter import os import datetime import time try: import pymysql except: print("can't find pymysql") tcplocalport=8101 #TCP监听端口 tcpconnectport=8101 #TCP连接端口 u

java 25 - 5 网络编程之多线程实现聊天室

平时聊天都是在同一个窗口的,所以,这个窗口同时实现发送数据和接收数据,这时就需要多线程实现. 建立一个类: 把聊天的发送端和接收端放在同一个类,启动一个窗口 1 public class CharRoom { 2 3 public static void main(String[] args) throws IOException { 4 5 //创建socket发送对象和接收对象 6 DatagramSocket send = new DatagramSocket(); 7 DatagramS

java socket网络编程(多线程技术)

Client.java import java.io.*; import java.net.*; import java.util.*; public class Client { public static void main(String args[]) { Scanner scanner = new Scanner(System.in); Socket mysocket=null; DataInputStream in=null; DataOutputStream out=null; Th

Java网络编程之多线程Client-Server

前面废话过了,现在就直接看代码吧! ThreadedClient.java package exercise01; import java.io.*; import java.net.*; public class ThreadedClient { private String hostname; private int port; Socket socket = null; public ThreadedClient(String hostname, int port){ //construc

8.Python网络编程_多线程死锁

死锁:指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程. 此程序的两个线程会因为互相等待对方的互斥锁而陷入等待,最后由于主线程执行完毕而结束了各个子线程,从而程序结束. 1 import threading 2 import time 3 4 class MyThread1(threading.Thread): 5 def run(self):

【LINUX/UNIX网络编程】之简单多线程服务器(多人群聊系统)

RT,Linux下使用c实现的多线程服务器.这个真是简单的不能再简单的了,有写的不好的地方,还希望大神轻拍.(>﹏<) 本学期Linux.unix网络编程的第四个作业. 先上实验要求: [实验目的] 1.熟练掌握线程的创建与终止方法: 2.熟练掌握线程间通信同步方法: 3.应用套接字函数完成多线程服务器,实现服务器与客户端的信息交互. [实验内容] 通过一个服务器实现最多5个客户之间的信息群发. 服务器显示客户的登录与退出: 客户连接后首先发送客户名称,之后发送群聊信息: 客户输入bye代表退

0730------Linux网络编程----------服务器端模型(迭代,多进程,多线程,select,poll,epoll 等)

1.迭代服务器模型 1.1 迭代服务器是处理多个请求时一种最简单直接的思路,即使用while循环,它不具有并发能力,即必须一个一个的处理客户的请求. 1.2 程序示例. #include "def.h" int listenfd_init(); //返回一个处于监听状态的套接字描述符 void do_service(int peerfd); // 处理客户端的请求 int main(int argc, const char *argv[]) { if(signal(SIGPIPE, S