摘要:
有一种方法论说进行原子操作的时候资源不需要被保护。原子操作就是种因为太小而无法被 电脑中央处理器分开的操作。由于它的小尺寸,它不会有 convention 问题,因为它会被单独 执行而不会在执行中被任务切换。特别地,原子操作就是编译到单个汇编指令的几行源代码。 典型地,像那些对一个整型或者布尔型域的 阅读全文
摘要:
多线程应用常常有很多的用户界面更新。大部分你通过把应用程序做成多线程而得到的性能 提升会由于用户界面更新导致的延迟而快速地丢失掉。许多情况下,这会导致一个多线程应 用的运行速度还不如它的单线程版本。 实现服务器应用的时候应该特别考虑些东西。服务器是个服务者,它的主要功能是为它的客 户端服务。用户界面 阅读全文
摘要:
同步常常用于进行用户界面更新。 同步带来的问题是调用线程会暂停到同步完成。因为主线程会处理所有的同步,同时只能处 理一个同步,因此它们是一个一个处理的。这导致了全部全局的同步成为了一个巨大的瓶颈。 只要有可能,就用通知来替代同步。 阅读全文
摘要:
临界区是个用来控制资源访问的有效并且轻量的实现,所以同时只能有一个线程可以访问给 定的资源。 经常一个临界区被用来保护多个资源。比如资源 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 阅读全文