Crab213's Blog.

Crab213's Blog.

A monad is just a monoid in the category of endofunctors.

Java并发编程实践笔记1:线程安全基础

线程的优点现代计算机通常都有多个处理器。线程作为大多数操作系统的调度单位可以有效提升计算机的处理效率。在处理阻塞IO的问题上线程更加占有优势,当IO阻塞时,被阻塞的线程等待,其他线程可以继续执行,相互不影响。 线程可以简化程序的模型。当我们将所有操作放在同一个进程中时,程序的模型会变得及其复杂。我们必须在同一个进程中处理所有的事务。这就意味着我们不能轻易的让进程阻塞,必须要使用非阻塞IO。同时,我们需要在进程中处理多个任务,而经验告诉我们,一个进程处理一个事情会使程序简化,不易出错。 线程允许我们写出相应速度更快的UI。我们可以将UI的事件处理放在同一个线程中,将其他任务放在其它线程中,...

TCP/IP详解阅读笔记5:TCP心跳机制

根据TCP的实现机制,只要TCP协议的两端不出现重启,或者更换IP地址,并且不关闭TCP连接的话,TCP连接就会一直维持,至少原理上是这样。TCP连接在双方都处于闲置状态时,TCP两端不会发送接受任何信息。但是有些情况下,我们是需要知道对面是否关闭或者丢失了连接,或者我们想要保持一个最小限度的连接流,哪怕TCP两端实际上没有需要交换的数据。TCP心跳(keepalive)机制提供了这样的功能。TCP心跳机制提供了一种在不干扰正常通讯内容前提下检测网络另一头的方法。它控制一个心跳检测定时器,每当定时器到时时,发出一个心跳检测,接受端收到这个检测时,会发回一个ACK。 TCP心跳机制是一个很...

TCP/IP详解阅读笔记6:TCP超时与重发

TCP重发机制TCP协议在IP层之上实现了正确有序地发送数据。为了实现这个目的,每当TCP协议意识到有数据丢失时,他会重新发送数据。这种重发有两种不同的机制来实现。 基于超时的重发TCP在发送数据的时候设置一个定时器,当定时器到时时,如果对面还没有发过来确认信息表明这个段被正确接收时,TCP就会重新发送这个段。这个定时器设定的时间被称作重发时限(RTO, retransmission timeout)。另一个重要的名词是往返时间(RTT, round-trip time)。每当TCP重发时限到了之后并且没有收到ACK后,TCP会重新发送这个段,并且把RTO设置成为原来的两倍,以此类推。实...

TCP/IP详解阅读笔记3:TCP流量控制

大块数据和交互数据大块数据(bulk data)是指大包的数据,通常达到了TCP段数据传送的上限。交互数据(interactive data)是指交互程序产生的数据包,例如ssh,telnet,以及即时通讯软件,通常这样数据非常零碎,数目巨大。交互数据非常浪费网络带宽,因为其传输效率低下。比如如果一个TCP段只发送一字节的数据,那么此时TCP头至少20字节,IP头至少20字节,发生了严重的浪费,占用的大量的带宽,这就是所谓的小包问题。 ACK延迟很多情况下TCP并不为每一个包发送一个ACK,因为ACK是累加性的,所以对多个包可以只发送一个ACK。因为减少了ACK的数量,所以这样做提高了网...

TCP/IP详解阅读笔记2:TCP连接管理

TCP连接建立TCP与UDP不同,是基于连接的协议,而UDP是俗称的数据报协议。TCP最大的不同是有连接,是有内部状态的协议。为了建立正确的连接,需要特定机制确定连接的参数及其状态。这些状态中最基本的包括连接双方的序列数(sequence number),窗口大小,以及双方能够接受的最大段长度(maximum segment size, MMS)。因此建立一个TCP连接需要进行一些约定好的步骤,也就是俗称的“三次握手”。 第一次握手TCP连接需要一个发起人,成为客户端(client),响应的另一方称之为服务端(server)。发起连接时,客户端向服务端发送一个SYN段(就是TCP头中FL...

TCP/IP详解阅读笔记1:TCP报文结构

TCP协议TCP协议是一个基于IP协议的传输层协议,补全了IP协议的各种缺陷,实现了一个基于流的传输协议。协议解决了IP协议在网络层的不稳定性,如丢包,包重复接受,接收包的顺序的不确定性,实现了错误检测,实现了基于流的稳定收发,提供了流控制和阻塞控制机制,为应用层通信提供了可靠连接。 TCP段的原理TCP的收发单位为TCP段(segment),由于TCP需要实现稳定的顺序收发,需要对每一个段提供一个单独的序号,称为序列数(sequence number)。同时,为了确定传输的数据确确实实被对面收到了,需要一个确认(acknowledgement)信号,告知对方我已收到数据。为了实现多应用...

Wayland - libwayland-client的实现细节研究

前言 本文是本人在研究wayland的C语言实现时所做的读书笔记。由于时间经历所限,仅仅完成的client部分的阅读。 libwayland-client的工作原理 wayland是一套用于替代X的图形显示系统。其中最重要的是wayland的协议,它用于服务端与客户端的交互。于是wayland的C语言实现其实就是wayland协议的实现。客户端的开发者可以通过libwayland-client这个库来实现与服务端通过wayland协议进行交互。 libwayland-client的主要任务就是实现wire format。wire format是wayland协议的底层通信时的表示形...

Linux上使用TTL串口连接树梅派

由于实际情况,没有显示器,usb键盘一类的外设,也没有路由器,而且本机架DHCP服务器也很麻烦,所以我试图使用UART连接树梅派 所需工具: FT232模块的USB转TTL电平小板一块 自配的杜邦线 树梅派 minicom这个大家都懂的东西 需要注意的是,树梅派的电平需要3.3V而不是5V。将树梅派的GND接板子的GND, RXD接板子的TXD, TXD接板子的RXD, 开机插入USB接口。我使用的是Archlinux,查看一下dmesg,发现板子已经自动识别,/dev下面多了一个/dev/ttyUS0, 现在运行minicom -s,将Filename and path...

6model - Data Structures

本文是6model/overview.pod中一个段落的翻译。 Data Structures 6model的核心是三种类型的数据结构。 Objects 除了内建的类型,所有用户直接接触的东西是Object。在6model中,Object是用户唯一会接触的数据类型。一个Object是一片连续的存储空间。惟一的限制是这片存储空间的第一个位置是一个指向一个Shared Table的指针/引用。 Representations 一个Object开头是一指向Shared Table的指针/引用,我们当然需要知道它其余的部分代表什么,这就是Representation的工作。一个Repres...
crab2313
slave get your ass back here ♂.
FRIENDS
friendA friendB