13.07.2015 Views

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

不 过 , 通 过 不 懈 的 努 力 ,<strong>Perl</strong> 5.6 现 在 在 Windows 里 实 现 了 fork 操 作 , 方 法 是 在 同 一个 进 程 里 克 隆 一 个 新 的 解 释 器 对 象 。 这 意 味 着 本 书 其 余 部 分 使 用 fork 的 例 子 现 在 在Windows 里 都 可 以 使 用 了 。 克 隆 出 来 的 解 释 器 与 其 他 解 释 器 共 享 不 可 改 变 的 代 码 段 但 是 有自 己 的 数 据 段 。( 当 然 , 对 那 些 可 能 不 理 解 线 程 的 C 库 可 能 仍 然 有 问 题 。)这 种 多 进 程 的 方 法 被 命 名 为 ithread, 是 “interpreter threads”( 解 释 器 线 程 ) 的 缩 写 。实 现 ithread 的 最 初 的 动 力 就 是 在 Microsoft 系 统 上 模 拟 fork。 不 过 , 我 们 很 快 就 意 识到 , 尽 管 其 他 解 释 器 是 作 为 独 立 的 线 程 运 行 的 , 它 们 仍 然 在 同 一 个 进 程 里 运 行 , 因 此 , 要 让这 些 独 立 的 解 释 器 共 享 数 据 是 相 当 容 易 的 , 尽 管 缺 省 时 它 们 并 不 共 享 数 据 。这 种 做 法 和 典 型 的 线 程 模 型 是 相 对 的 , 那 种 模 型 里 所 有 东 西 都 是 共 享 的 , 而 且 你 还 得 花 点 力气 才 能 不 共 享 一 些 东 西 。 但 是 你 不 能 把 这 两 种 模 型 看 作 是 完 全 分 离 的 两 个 模 式 , 因 为 它 们 都试 图 在 同 一 条 河 上 架 桥 通 路 ; 只 不 过 它 们 是 从 相 对 的 河 两 岸 分 别 开 工 的 。 任 何 解 决 并 发 进 程问 题 的 方 法 实 际 上 最 后 都 是 某 种 程 度 的 共 享 和 某 种 程 度 的 自 私 。所 以 从 长 远 来 看 ,ithread 的 目 的 是 允 许 你 需 要 或 者 想 要 的 尽 可 能 多 的 共 享 。 不 过 , 到 我 们写 这 些 为 止 ,ithread 唯 一 的 用 户 可 见 的 接 口 是 在 <strong>Perl</strong> 的 Microsoft 版 本 里 面 的 fork调 用 。 我 们 最 终 认 为 , 这 个 方 法 能 比 标 准 的 线 程 方 法 提 供 更 干 净 的 程 序 。 原 则 上 来 说 , 如 果你 假 设 每 个 人 都 拥 有 他 该 拥 有 的 东 西 , 那 么 这 样 的 系 统 更 容 易 运 转 , 相 比 之 下 每 个 人 都 拥 有所 有 的 东 西 的 系 统 要 难 于 运 转 得 多 。 不 象 资 本 主 义 经 济 那 样 没 有 共 享 的 东 西 , 也 不 是 共 产 主义 经 济 那 样 所 有 东 西 都 共 享 。 这 些 东 西 有 点 象 中 庸 主 义 。 类 似 社 会 主 义 。 不 过 对 于 一 大 堆 人而 言 , 只 有 在 拥 有 一 个 很 大 的 绞 肉 机 , 而 且 “ 厨 师 长 ” 认 为 它 拥 有 所 有 东 西 的 时 候 共 享 全 部东 西 才 可 行 。当 然 , 任 何 计 算 机 的 实 际 控 制 都 是 由 那 个 被 称 做 操 作 系 统 的 独 裁 者 控 制 的 。 不 过 是 聪 明 的 独裁 者 知 道 什 么 时 候 让 人 们 认 为 它 们 是 资 本 主 义 -- 以 及 什 么 时 候 让 他 们 觉 得 是 共 产 主 义 。17.2 线 程 模 型并 发 处 理 的 线 程 模 模 型 是 在 版 本 5.005 里 第 一 次 以 一 种 试 验 特 性 介 绍 到 <strong>Perl</strong> 里 来 的 。( 这 里 “ 线 程 模 型 ” 的 意 思 是 那 些 缺 省 时 共 享 数 据 资 源 的 线 程 , 不 是 版 本 5.6 里 的ithreads。) 从 某 种 角 度 来 说 , 这 个 线 程 模 型 即 使 在 5.6 里 也 仍 然 是 一 个 实 验 的 模 型 , 因为 <strong>Perl</strong> 是 一 门 复 杂 的 语 言 , 而 多 线 程 即 使 在 最 简 单 的 语 言 里 也 可 能 搞 得 一 团 糟 。 在 <strong>Perl</strong>的 语 意 里 仍 然 有 隐 蔽 的 地 方 和 小 漏 洞 , 这 些 地 方 不 能 和 共 享 所 有 东 西 的 概 念 完 全 融 合 在 一起 。 新 的 ithread 模 型 是 一 个 绕 开 这 些 问 题 的 尝 试 , 并 且 在 将 来 的 某 个 时 间 , 现 在 的 线 程模 型 可 能 会 被 包 容 在 ithread 模 型 里 ( 那 时 我 们 就 可 以 有 一 个 “ 缺 省 时 共 享 所 有 你 能 共 享的 东 西 ” 的 ithread 接 口 )。 不 过 , 尽 管 有 瑕 疵 , 目 前 的 “ 试 验 性 ” 的 线 程 模 型 仍 然 在 现 实世 界 中 的 许 多 方 面 用 得 上 , 那 种 情 况 下 你 只 能 换 一 种 你 不 想 要 的 更 笨 拙 的 方 法 。 你 可 以 用 线454

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!