zoukankan      html  css  js  c++  java
  • socket编程

      TCP是面向连接的传输,通信前建立连接,(三次握手),UDP提供无连接的传输。

     TCP是可靠的传输(有序、无差错,不丢失、不重复)

    TCP面向字节流的传输,以此它能将信息分组,并在接收端重组,UDP是面向数据报的传输。

    TCP提供拥塞控制和流量控制;UDP不提供拥塞控制和流量控制。

      2. 流量控制和拥塞控制的实现

      TCP采用大小可变的 滑动窗口实现流量控制功能。窗口的大小是字节。在TCP报文段的首部的窗口字段写入的数值就是当前给对方设置发送窗口的数据的上限。

      在数据传输过程中,TCP提供了一种基于滑动窗口协议的流量控制机制,用接收端的接受能力(缓冲区的容量)的大小来控制发送短的数据量。

     3 采用滑动窗口机制还可以对网络进行拥塞控制。将网络中的分组数量控制在一定的数量之下,当超过该数值时,网络的性能会急剧下降,传输层的拥塞机制有慢开始、拥塞

    避免、快重传、快恢复四种算法。

    拥塞;大量数据报涌入同一交换节点(如路由器),导致该节点资源耗尽而必须丢弃后面到达的数据报。就是拥塞。

      滑动窗口机制:

    多线程如何同步:

      临界区:通过多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问,

    在任意时刻值允许一个线程对公共资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的 线程将被挂起,并一直等到进入临界区的线程离开

    临界区在被释放后,其他线程才可以抢占。

    互斥区:采用互斥对象机制。只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以才能保证公共资源不会同时被多个线程访问。互斥不仅能够实现同一

    应用·程序的公共资源安全共享,还能实现不同程序的公共资源安全共享,互斥量要临界区要复杂。因为使用互斥不仅仅能够在同一应用程序中不同线程中实现安全共享,而且可以在不同应用程序的线程

    之间实现对资源的安全共享。

    事件:

    信号量:它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目,信号量对象对线程的同步方式与前面几种不同,信号允许多个线程同时使用

      共享资源,这与操作系统的PV操作相同。它指出了同时访问共享资源的线程的最大数目。它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问次此资源的最大线程数量。

    PV操作、信号量:

    进程间通信的方式:

     1.管道: 半双工通信的方式,数据只能单向流动,而且只能在具有亲缘关系的进程之间使用。进程之间的亲缘关系通常是指父子亲缘关系。

     2.有名管道(FIFO):有名管道也是半双工的通信方式,但是允许在没有亲缘关系的进程之间使用,管道是先进先出的通信方式

    3.信号量: 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在共享资源时,因此,主要作为进程间以及同一进程间不同线程之间的同步手段。

    4  消息队列:消息队列是有消息的链表,存放在内核中并由消息队列标识符标识,消息队列克服了信号传递量少,管道只能承载无格式字节流以及缓冲区大小受限的问题。

    引用:  https://blog.csdn.net/u014800094/article/details/60591852

    好好生活,天天向上
  • 相关阅读:
    [LeetCode]Power of N
    uboot学习之uboot启动流程简述
    [LeetCode]Palindrome Pairs
    [LeetCode]Gray Code
    快速排序 partition函数的所有版本比较
    Linked List Cycle && Linked List Cycle II
    Simplify Path leetcode
    Pow(x, n) leetcode
    Swap Nodes in Pairs leetcode
    Multiply Strings leetcode
  • 原文地址:https://www.cnblogs.com/linchongatfirst/p/9103918.html
Copyright © 2011-2022 走看看