随笔分类 - indy10
indy10
摘要:同步常常用于进行用户界面更新。 同步带来的问题是调用线程会暂停到同步完成。因为主线程会处理所有的同步,同时只能处 理一个同步,因此它们是一个一个处理的。这导致了全部全局的同步成为了一个巨大的瓶颈。 只要有可能,就用通知来替代同步。
阅读全文
摘要:临界区是个用来控制资源访问的有效并且轻量的实现,所以同时只能有一个线程可以访问给 定的资源。 经常一个临界区被用来保护多个资源。比如资源 A,B,和 C。用一个临界区来共同地保护 它们,然而每个资源是独立的。于是就产生了个问题,当 B 被使用的时候,A 和 C 也一样被 锁住了。临界区相当的轻量级,
阅读全文
摘要:实际上,平均水平的系统在单个进程创建了超过 1000 个线程之后开始会出现问题,这是由 于内存问题。可以减少线程的栈的大小以增加线程的数量,但是这种时候可以研究一下另外 一种选择。 大部分服务器最多只需要几百个线程。但是非常大容量的服务器,或者那些流量很低但是连 接的服务器数量及其巨大的服务器,比如
阅读全文
摘要:TIdTCPServer 的事件们是线程性的。换句话说就是尽管它们不是线程类的一部分,它们是在 个线程内被执行的。这个细节十分重要。请确保你在编程前理解了这个细节。 可能这一开始有些令人困惑,事件为什么会看起来是窗体的一部分,结果却在个线程内执行。 然而它内部被这样构建以便于事件能像其他事件一样在设
阅读全文
摘要:TIdThreadMgrDefault,Indy 中默认的线程管理是很简单和基础的。每次需要个线程的时候,就会创建个。当线程不 再需要的时候,它就被摧毁。 一般地,默认线程管理是合适的。但是对于那些服务短生命周期的链接的服务器,服务每个 请求的线程的创建和销毁过程的时间对比于服务请求的时间是无法忽略
阅读全文
摘要:Indy9 只实现了一个网络接口。在 Windows 中,这个接口是 Winsock 而在 Linux 中是 stack。 Indy 10 在实现了这些接口之外还在 Windows 下实现了一些更有效率的接口。目前在 Linux 下还没有实现其他有效率的接口,但是以后会有的。由于它的网络语义学(ne
阅读全文
摘要:INDY的纤程调度器调度纤程们到一个或多个线程中去。纤程储存工作项目 到一个工作序列中然后等待。当纤程的工作项目被完成后,调度器把纤程放到一个可以被调 度的纤程列表中。 操作系统时间调度器以一种智能的方式调度线程,但是由于在系统的所有任务间每个线程都 是普通和泛型的(generic),它们对线程的信
阅读全文
摘要:Indy 10 还包含对纤程的支持。纤程是什么?简单来说,它也是 一个“线程”,但是它是由代码控制的,而不是由操作系统控制的。实际上,可以认为线程 是一个高级纤程。纤程和 Unix 用户线程(Unix user threads)很相似。 线程是操作系统用来分配时间的基本单元。一个线程包含它自己的栈(
阅读全文
摘要:Indy 中的工作队列系统,调度器,和链引擎都被叫做链。 当使用链的时候,一个基于链的 IOHandler 存储工作项目到有关的工作队列中。在一个工作单元被完成以前,执行这个工作单元的纤程是无法做其它事情的,纤程执行完一个工作单元经后就被挂起。 每个 IOHandler 方法都被简化为一个或多个工作
阅读全文
摘要:在 Indy9 的服务器中,链接特定(connection specific)的数据被作为线程类的一部分被存储。 实现这个要不然通过使用 thread.data 属性要不然通过继承对应的 thread 类然后添加新的字 段或者属性来存储。这能起作用,因为每个链接都有配套一个指定的线程。 Indy10
阅读全文
摘要:UDP (User Datagram Protocol)用户数据报协议是用来发数据电报,不用连接。UDP 能够无连 接的发送轻量级数据包给主机。UDP 数据包不保证到达目的地,也可能不按发报的顺序到达。 当发送一个 UDP 数据包时,它是成块发送的。因此,你决不能发超过你的 TCP/IP 栈的最大
阅读全文
摘要:在 Windows 下的 socket 编程有两个编程模型,阻塞和非阻塞。有时,他们也被叫做同步(阻 塞)和异步(非阻塞)。 在 Unix 中只支持阻塞模型。 实际上还 有些 其他的 已经实 现的模 型。 包括完 成端口 (completion ports), 和重叠 I/O(overlapped
阅读全文
摘要:发送结构体:TMyData = record id:Integer; Name:Array[0..20] of Char; Sex:Array[0..10] of Char; Age:Byte; Address:Array[0..256] of Char; UpdateTime:double; en
阅读全文
摘要:針對INDY9版本 // 使用完的線程歸還線程池 procedure TIdThreadMgrPool.ReleaseThread(AThread: TIdThread); var LThreadPool: TList; begin ActiveThreads.Remove(AThread); LT
阅读全文
摘要:TIdAntiFreeze工作原理:在内部定时停止堆栈调用、然后调用Application.ProcessMessages。 Indy支持线程pooling。可以用TIdThreadMgrPool组件利用线程pooling 数以百计的线程对于一个忙碌的服务器,可能需要数以百计、千计的线程。人们普遍误
阅读全文
摘要:unit uFrmSplash; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, jpeg, ExtCtrls, StdCtrls
阅读全文
摘要:IdTCPClient属性1 : IOHandler 如果有相应的输入/输出操作,那么IOHandler相对应的组件或接口将提供一个虚拟/抽象的输入/输出接口给相应的网络连接 2 : Intercept 如果有一个网络连接正在使用,那么Intercept 提供的组件或接口将可以拦截相应的网络数据流中
阅读全文
摘要:用idTCPServer,客户端接上来时,如何取得客户端的IP? IP:=AThread.Connection.Binding.PeerIP;Port:=AThread.Connection.Binding.PeerPort; 尝试解答你的疑问:问题一:在Form1中放入IDTCPServer控件,
阅读全文