自信人生两百年,会当水击三千里!
  • Android

    Android Google 公司为移动设备而开发的遵循 Apache/MIT 开源许可证、完全开发的、全软件栈操作系统。为 Android 应用开发者提供工具和框架;为用户提供一个不依赖硬件的通用平台;为设备商提供完整的解决方案。

    Android is a comprehensive platform, which means it is a complete software stack for a mobile device.

    For developers, Android provides all the tools and frameworks for developing mobile apps quickly and easily.

    For users, Android just works right out of the box. Additionally, users can customize their phone experience substantially.

    For manufactures, it is the complete solution for running their devices. Other than some hardware-specific drivers, Android provides everything else to make their devices work.

    Android 生态系统

    Google Android 开发系统由三个部分组成:

    1.       Android 源代码工程 (Open Source Project) 包括 Android 全部源代码 : https://source.android.com

    2.       Android 开发者 (Developer) 包括 SDK API 和文档 : https://developer.android.com

    3.       Android 应用市场 (Market) 是一个开发者发布应用程序的平台 : https://market.android.com/

    Android 系统

    Android 一词最早出现于法国作家利尔亚当( Auguste Villiers de l'Isle-Adam )在 1886 年发表的科幻小说《未来夏娃》( L' è ve future )中外表像人的机器起名为 Android

    2003 10 月由 Andy Rubin Rich Miner 创办一家公司 Android 专门研发 Android

    2005 Google 收购了 Android 公司;

    2007 11 5 Google 正式展示、发布了开源手机手机操作系统平台 Android Google 宣布组建的一个全球性的联盟组织 - 开放手持设备联盟( Open Handset Alliance ),联盟将支持 Google 发布的手机操作系统或者应用软件,共同开发 Android 系统的开放源代码。开放手持设备联盟包括手机制造商、手机芯片厂商和移动运营商

    2007 11 12 号发布 Google SDK

    2008 8 18 日, Android 获得了美国联邦通信委员会( FCC )的批准;

    2008 9 23 日,第一款 Android 手机发布, HTC Dream(G1)

    2008 年, Patrick Brady Google I/O 演讲“ Anatomy & Physiology of an Android ”,并提出的 Android HAL 架构图;

    2009 2 月, Android 1.1 发布;

    2009 2 月, Google 推出 Android Market 线上应用程序商店,用户可在该平台网页寻找、购买、下载及评级使用手机应用程序及其他内容;

    2009 4 30 日, Android 1.5 Cupcake 版本发布;

    2009 9 15 日, Android 1.6 Donut 版本发布;

    2009 10 26 日, Android 2.0 Eclair 版本发布;

    2010 2 3 日, Linux 内核开发者 Greg Kroah-Hartman Android 的驱动程序从 Linux 内核“状态树”(“ staging tree ”)上除去,从此, Android Linux 核心开发分道扬镳;

    2010 5 20 日, 2.2 Froyo 版本发布;

    2010 12 7 日, 2.3 Gingerbread 版本发布;

    2011 2 2 日, 3.0 Honeycomb 版本发布;

    2011 5 11 日, 3.1 Honeycomb 版本在 Google I/O 开发者大会宣布发布;

    2011 7 13 日, 3.2 Honeycomb 版本发布;

    2011 10 19 日, 4.0 Ice Cream Sandwich 版本发布;

    Android 版本代号命名规则,从 Android 1.5 开始,按着 26 个英文字母的顺序作为首字母,选择一种甜点单词作为版本的代号;因此, Android 下一个版本发布的代号即是: Jelly Bean

    Andy Rubin

           纽约州 Chappaqua 长大,父亲拥有自己的消费电子直销公司,从小就接触各种最新的电子设备;

           在纽约州由提卡学院读计算机科学。

           毕业后在蔡司公司任机器人工程师。

           1989 年加入苹果公司。

           1990 年,苹果分拆他所在的手持计算和通信设备部门,成立 General Magic 公司,在这里他开发了手持设备操作系统 Magic Cap

           公司倒闭后加入 Artemis Research ,开发了交互式互联网电视 WebTV

           后与人创办 Danger 公司,担任 CEO ,但不久被免职。 Danger 公司开发了后来被称为 T-Mobile Sidekick 的手机,公司于 2008 年被微软收购。

           2003 年与 Rich Miner 一起创办了 Android 公司。

           2005 Android 公司被 Google 收购,任 Google 工程副总裁,领导开发了 Android 操作系统。

           并拥有多项无线通信专利。

    市场上手机操作系统

    1.       Apple iOS

    2.       Google Android

    3.       Microsoft Window Phone

    4.       Blackberry OS

    5.       HP WebOS

    6.       Nokia Symbian

    7.       Meego

    8.       Palm OS

    9.       Samsung Bada

    10.   Tizen

  • 2011-10-22

    初学Java - [Java]

    前言

    从学习 Java 到J ava 编程,从来没有仔细去梳理或者翻阅一下 Java 的过往历史。从最开始 Sun 的“绿色项目”,已经过去了 21 年了;从 Java 第一次发布,已经近 16 年了。 回头整理、梳理一下 Java 的历史,让自己 对Java有个重新的了解和认识。

    Java 语言

    起源于 Sun 公司 (Sun Microsystems Inc.) 1990 12 月针对公司公司内部的“绿色项目” (Green Project) 而设计的一门程序语言。项目组使用的运行平台是嵌入式平台,最开始 Patrick Naughton 尝试使用 c c++ 作为编程语言,但复杂度太高,随着 James Gosling Mike Sheridan Sun 首席科学家 Bill Joy 等的加入,于是希望在 C++ 基础上,开发一种面向对象的环境,目标设置为应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信方向的程序语言 . ,具备垃圾回收系统、可移植的安全性、分布程序设计、多运行续功能;随后发展为一种易于移植到各种设备上的平台;伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

    创建目标

    1. 应当简单、面向对象( It should be "simple, object-oriented and familiar"

    2. 应当健壮、安全( It should be "robust and secure"

    3. 应当跨平台、可移植( It should be "architecture-neutral and portable"

    4. 应当高性能( It should execute with "high performance"

    5. 应当解释型的、线程模型的、动态的 (It should be "interpreted, threaded, and dynamic")

    (http://java.sun.com/docs/white/langenv/Intro.doc2.html)

    Java 语言定义

    1.The Java programming language is a general-purpose, concurrent, class-based, object-oriented language.

    2.The Java Programming Language is a general-purpose, concurrent, strongly typed, class-based object-oriented language.

    3.Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。

    4. 一次编译、到处执行。 (write once, run anywhere.)

    ( http://java.sun.com/docs/books/jls/third_edition/html/intro.html)

    ( http://download.oracle.com/javase/6/docs/technotes/guides/language/index.html)

    Java 语言特点

    1. 简洁 (Simple and familiar)

    2. 面对对象 (Object-oriented)

    3. 跨平台 (Architecture neutral, portable and robust)

    4. 解释型、动态 (Interpreted and dynamic)

    5. 安全 (Security)

    6. 多线程 (Multithreading)

    7. 高性能 (High performance)

    8. 平台和应用程序库 (Java base system and libraries)

    (http://java.sun.com/docs/white/langenv/index.html)

    (http://java.sun.com/docs/overviews/java/java-overview-1.html)

    Java 平台

    1.Java Card :主要是提供高安全性的运行在智能卡或者类智能卡的 Java Applet ,广泛应用在 SIM 卡、提款机上等。

    2.Java ME(Micro Edition) Java 平台微型版,主要是为机顶盒、移动电话、 PDA 等嵌入式电子设备提供的 Java 语言平台,包括虚拟机和 API

    3.Java SE(Standard Edition) Java 平台标准版,包括 Java2 的开发环境、编译工具、程序库、运行环境。

    4.Java EE(Enterprise Edition) Java 平台企业版,为开发企业级应用提供的具备软件架构、设计思想、技术标准的通用平台。

    Java 技术概念地图

    (http://java.sun.com/new2java/javamap/intro.html)

     

    时间简史

    1990 12 月开始研究的一个内部项目,“ Stealth 计划”,重要成员 Patrick Naughton 加入,尝试用 C C++ 语言,被 C C++ 编译器搞的焦头烂额。

    随后,项目,“ Stealth 计划”后来改名为“ Green 计划”,重要成员 James Gosling Mike Sheridan Sun 首席科学家 Bill Joy 等相继加入。 Bill Joy 最早决定开发一种集 C 语言和 Mesa 语言大成的语言,提议在 C++ 基础上,开发一种面向对象的环境,并把它取名为“未来”。

    James Gosling 尝试在修改和扩展 C++ 的功能,并称之为 C++ ++ -- ,随后不得不放弃;转而决定要创造一门全新的编程语言,并以办公司外边的橡树 (Oak) 命名。

    1992 年的夏天, Green 项目组对平台进行了演示,包括 Green 操作系统, Oak 的程序设计语言,类库及其硬件。

    1992 11 月,项目演变成 Sun 公司的全资子公司“ FirstPerson ”有限公司,研发团队在美国加州 Palo Alto

    1992 12 3 日,对面向一种类 PDA 设备 Star7 运行该平台进行演示,这种设备有鲜艳的图形界面和被称为“ Duke ”的智能代理来帮助用户。

    随后,作为机顶盒平台在竞标时代华纳 (Time Warner) 电视机顶盒项目败给 SGI 公司;作为机顶盒平台和 3DO 公司的商业交易也失败,因此被 Sun 公司回购。

    1994 6 月, Bill Joy 启动了一个构建 "big small operating" 系统的项目“ Liveoak ”。之后, John Gage, James Gosling, Bill Joy, Patrick Naughton, Wayne Rosing Eric Schmidt 经过三天的头脑风暴,决定改变平台的目标定位,将平台应用在万维网领域 (World Wide Web)

    1994 7 月, Patrick Naughton 产生了将 Liveoak 作为互联网平台的想法,并利用一个长周末完成了一个 Web 浏览器。

    1994 9 月, Patrick Naughton Sun 的另外一名工程师 Jonathan Payne 开始合作开发基于 Java Web 浏览器 WebRunner ,随后改名为“ HotJava ”。

    在发现 Oak 已被一家显卡制造商注册之后, Oak 被改名为“ Java ”。

    1994 10 月, HotJava Java 一道在 Sun 公司高层中进行了演示。随机, Java 被发现和认识到其具备的平台无关性、安全、可依赖等特性在互联网领域有良好的匹配和发展。

    1994 年, Java 1.0a 版本开始提供下载。

    1995 3 23 SunWorld 大会上 Java HotJava 浏览器的第一次公开发布。同时网景公司的执行副总裁马克•安德森,宣布网景将在其浏览器中包含对 Java 的支持。

    1996 1 月,升阳公司成立了 Java 业务集团,专门开发 Java 技术。第一个 JDK-JDK1.0 诞生。

    1997 2 18 日, JDK1.1 发布。

    1997 4 2 日, JavaOne 会议召开,参与者逾一万人,创当时全球同类会议规模之纪录。

    1998 12 8 日, JAVA2 企业平台 J2EE 发布。

    1999 6 月, SUN 公司发布 Java 的三个版本:标准版( J2SE )、企业版( J2EE )和微型版( J2ME )。

    2000 5 8 日, JDK1.3 发布。

    2000 5 29 日, JDK1.4 发布。

    2001 9 24 日, J2EE1.3 发布。

    2002 2 26 日, J2SE1.4 发布,自此 Java 的计算能力有了大幅提升。

    2004 9 30 18:00PM J2SE1.5 发布,成为 Java 语言发展史上的又一里程碑。为了表示该版本的重要性, J2SE1.5 更名为 Java SE 5.0

    2005 6 月, JavaOne 大会召开, SUN 公司公开 Java SE 6 。此时, Java 的各种版本已经更名,以取消其中的数字“ 2 ”: J2EE 更名为 Java EE J2SE 更名为 Java SE J2ME 更名为 Java ME

    2006 12 月, SUN 公司发布 JRE6.0

    2009 4 20 日, Sun 公司宣布以每股 9.50 美元, 74 亿美金的总额被 Oracle 公司收购。

    2009 12 月, SUN 公司发布 Java EE 6

    2010 1 21 日,欧盟无条件通过了 Oracle 收购 Sun 的交易。 Java 之父 James Gosling 在其博客 (http://blogs.oracle.com/jag/entry/so_long_old_friend) 中发表博客“ So long, old friend 悼念 Sun

    2011 7 28 日, Oracle 公司发布 J2SE 7.0

    核心成员

    Bill Joy

           密歇根大学获得电气工程学士学位。

           1979 年在加州大学伯克利分校获得电气工程与计算机科学硕士学位。      

           1982 年,作为 Sun 的联合创始人、首席科学家,参与了 Sun 公司的成立。

           1986 年,因其在伯克利 UNIX 操作系统中所做的工作获得了 Grace Murray Hopper 奖。

           2003 9 月, Bill Joy 离开 Sun 。据说, Sun 公司的股票应声下跌了 3.2%

           贡献:

                  学生期间,他开发了 BSD 操作系统。其他人以 BSD 为基础发展出了很多现代版本的 BSD ,最著名的有 FreeBSD OpenBSD NetBSD ,苹果电脑的 Mac OS X 操作系统也在很大程度上基于 BSD 。其对 TCP/IP vi NFS C shell 均有重大贡献。

                  Sun 公司支持设计了 Sparc 微处理器,并将之前自己领导开发的 BSD 继续发展成为 Solaris 操作系统。 Java Jini 的主要作者之一。

    John Gage

           加州大学伯克利分校的数学教师,和 Bill Joy 是同事。

           Sun 的第 21 名雇员。

           创造了 Sun 的口号“ the network is the computer ”。

           1999 年发起 JavaOne

           2008 7 月离开 Sun ,加盟了硅谷老牌风投机构 KPCB ,成为该公司的合伙人。

    James Gosling

           1977 年获得了加拿大卡尔加里大学计算机科学学士学位。

           1981 年开发 Unix 上运行的类 Emacs 编辑器 Gosling Emacs

           1983 年获得了美国卡内基梅隆大学计算机科学博士学位,博士论文的题目是: "The Algebraic Manipulation of Constraints"

           毕业后到 IBM 工作,设计 IBM 第一代工作站 NeWS 系统,后转至 Sun 公司。

           1990 年,与 Patrick Naughton Mike Sheridan 等人合作“绿色计划”。

           1994 年底, James Gosling 在硅谷召开的“技术、教育和设计大会”上展示 Java

           2007 年,被授予二级 加拿大勋章。

           2010 4 月宣布从 Oracle 公司离职。

           2011 3 29 日,在个人博客上宣布将加入 Google

           2011 8 30 日,仅仅加入 Google 数月之后的高斯林就在个人博客上宣布离开 Google ,加盟一家从事海洋机器人研究的创业公司 Liquid Robotics ,担任首席软件架构师。

           主要贡献:

                  Java 共同创始人之一,公认的 Java 之父。

    Mike Sheridan

           Claremont College 学习经济学和俄罗斯历史,后在 American University 学习电影。

           1990 年加入 Sun 公司的“ Green Project ”项目,协作开发 Java 语言。随后和 Sun CTO Eric Schmidt 一起主导 Java 的战略发展和商业开发。

           1998 年,加入 Novell 公司,领导的新产品计划和商业机会的发展,基于业界领先的 Novell 目录服务( NDS )和 Novell 公司的智能缓存系统。直接向 Novell 总裁和 CEO Eric Schmidt 汇报。

    Patrick Naughton

           1980 年, Naughton 用打零工挣的钱买了他的第一台微机 Atari400

           1985 年从 Clarkson 大学毕业。

           1988 8 月,加入 Sun 公司。

           1990 12 5 日, Patrick Naughton 开始了绿色项目( Green Project ),并邀请了 Gosling Mike Sheridan 来帮忙启动这个项目。

           1991 4 月,绿色项目组( Naughton Gosling Sheridan )开始以“智能家电”( smart consumer electronics )为目标市场。而 Gosling 开始为 Oak 编程语言而努力工作。 Gosling C 写了最早的编译器,而 Naughton Gosling Sheridan 完成的运行时解释程序也是用 C 完成的。 1991 8 月, Oak 的第一个程序诞生了。

           1994 Patrick Naughton 写了一个叫 WebRunner 的浏览器雏形。经过 Naughton Jonathan Payne 增补,这个浏览器成为 Hot Java

           1994 年离开 Sun 公司,加入 Starwave ,开发服务器端 Java 应用。

           1995 年,著书《 The Java Handbook 》。

           1996 年,和 Herbert Schildt 著书《 Java: The Complete Reference 》。

           1998 年, Walt Disney Internet Group 收购 Starwave ,并使之与 Infoseek 合并, Patrick Naughton 担任 Infoseek 公司 Executive Vice President ( 注:百度创始人李彦宏曾经是 Infoseek 的核心工程师之一。 )

           1999 年,在圣莫尼卡码头被_捕, 被判有罪 ( 注: Infoseek 的首席执行官 Motro 在得知 Naughton 被_捕 _ _ _ _ _ _ _ _ _ 系,并出了 10 _ _ _ 元的保_释_金。 )

           此后,被 Infoseek 公司开除。

           2004 年,加入 Azaleos 公司。

           2009 年,离开 Azaleos 公司,加入 L1 Partners ,担任 CTO

           2010 年,重新回到 Azaleos 公司,担任 Vice President of Engineering

    Wayne Rosing

           1970 年代后期,在 Digital Equipment and Data General 公司担任工程经理 (Engineering Manager)

           1980 年代,加入苹果公司,担任工程总监 (Director of Engineering) ,主要负责 Apple 计算机公司 LISA Apple II

           后加入 Sun 公司,担任 Sun 公司全资子公司 FirstPerson, Inc. 的总裁,主要是领导研发 Java ,建立 Sun 实验室。

           后加入 Caere Corporation 公司担任首席技术官兼工程副总裁,负责管理 Caere 的光学字符识别 (OCR) 生产线的所有工程项目,并曾大力推动收购 Omniform 应用程序,后来该程序成为 Caere 的主要产品之一。

           2001 1 月到 2005 5 月期间,在 Google 担任工程副总裁 (Vice President of Engineering)

           此后,作为 Google Advisor ,在加州大学研究 mathematical and physical sciences

           另,自己动手设计并制作了遥控天文望远镜,和潜入南太平洋深海拍摄海底生物。

    Eric Schmidt

           1955 4 27 日在美国华盛顿特区出生,毕业于维吉尼亚州阿灵顿郡约克敦高中。

           1976 年,施密特在普林斯顿大学取得电气工程( BSEE )的学士及硕士学位;

     1979 年,施密特于柏克莱加州大学因为设计一电脑网络而得到理学硕士学位;

     1982 年,以探讨分布式的管理软件问题为主要论文课题,取得了电子工程暨计算机科

    (EECS) 哲学博士学位。

     曾加入了程式编译器 lex 的编辑工程,且于史丹福商学院兼职教授。

     在贝尔实验室、 Zilog 和当时全录辖下的帕罗奥多研究中心担任研究员。

     1983 年,施密特以软件经理的身分加入 Sun 公司,并主导了 Java 平台技术的发展、升阳电脑独立平台的程式技术,并且确立了公司的网络策略。之后,他成为了 Sun 公司的首席技术官 (CTO) 及企业总裁。

     1997 年,施密特担任了 Novell 公司的总裁,之后 Novell 收购了 Cambridge Technology Partners

     在风险投资家 John Doerr Michael Moritz 的建议下, Google 创始人拉里•佩奇和谢尔盖•布林于 2001 年招募 Eric Schmidt 来运作 Google 公司。

     在 2001 3 月以董事会成员的身分担任 Google 的董事长,并在同年 8 月兼任总裁一职。

     2006 8 28 日,施密特当选成为苹果公司董事会成员;但在 2009 8 3 日,因为 Google 与苹果公司日益激烈的利益冲突和竞争,施密特宣布退出董事会。

     2008 10 19 日,施密特担任了奥巴马于竞选期间的非正式顾问,并开始竞选活动。在奥巴马胜选后,施密特为其咨询委员会的其中一员,并建议要解决美国内部问题最简单的方法为奖励可再生能源的开发,以取代化石燃料的使用。

     2011 年三月,埃里克•施密特获得美国商务部长的提名。

    一点想法

           Java 从最开始的一个项目,多次演进和变化,经历了 21 年,成为了现在第一大的编程平台,改变了编程世界,改变着着整个 IT 世界,在移动互联网领域正继续着它的神话。

           Java 每一个阶段,都是有着清晰的定位和目标的;不论他的失败或者成功。

           Java ,似乎从来都没有为了匹配一个商业模式而生,伴随着开放,伴随着社区,传说着它的神奇。

           Java 发展过程中先后加入的核心成员,每一位都是 IT 大牛;也许印证了, Java 的成功,绝非偶然。

    参考资源

    The Java Language Overview: http://java.sun.com/docs/overviews/java/java-overview-1.html

    Java SE Platform: http://www.oracle.com/technetwork/java/javase/tech/index.html

    Java SE HotSpot: http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136373.html

    Java Technology Concept Map: http://java.sun.com/new2java/javamap/intro.html

    History Of Java: http://ei.cs.vt.edu/~wwwbtb/book/chap1/java_hist.html

  • 因为实际需要所致,我们不得不考虑在现有的开源/商用的应用服务器之外开发一个,有性能要求、有并发要求的服务端应用,从技术要求的角度来分析一下,用Java实现这件事情我们可能关注的知识层面。

    在整体上,可能需要我们从下面几个层面出发来考虑:

     

    1.在硬件和操作系统层面:为什么需要关注这两个方面的知识,因为Java并没有自己的线程,使用的也是OS中的IO,所以我们不得不去了解系统在不同的硬件、OS上面的适用情况、运行情况。比方说,多核技术对于操作系统的影响,这种影响直接会传递到JVM层面;对于数据传输操作的DMA(Direct Memory Access, 存储器直接访问)方式的了解,便于我们更好的了解CPU和IO的关系。同样的,对于OS层面的select/poll/epoll的认识,不仅帮助我们去理解Java的IONIO(New IO)AIO(Asynchronous IO)的发展之路,同时让我们对IO/NIO/AIO在Java层面的体现有更清晰的思路。

    Select

    Select在1983年首次出现,是在4.2BSD中。通过select()的系统调用来监视包含多个文件描述符的数组;当select()返回后,该数组中就绪的文件描述符便会被内核修改标志位,使得进程可以获得这些文件描述符从而进行后续的读写操作。

    Select方式现在为几乎所有的平台支持,具备良好的跨平台支持。同时,select()方式需要维护一个存储文件描述符的数据结构,随着其的增加,对其的内存操作的开销也会线性增加;每次网络响应,进程在调用select()的时候都会对所有的socket做一次线性扫描,包括那些处于非活跃状态的连接,这也是一个巨大的开销;在系统方面,每个进程能够监视的文件描述符的数量是有最大限制的,通过宏FD_SETSIZE来指定的,在Linux中这个值默认是1024,修改这个宏值并生效,有时候可能需要重新编译OS的内核:).

    Poll

    Poll是在1986先首次出现,是在System V Release 3中。其和select相比在本质上变化不大,只是poll没有了select方式的最大文件描述符数量的限制。

    注:select()和poll()采用的模型都是:水平触发(Level Triggered)。

    Epoll

    Epoll是在Linux 2.6版本中开始有内核直接支持的实现方式。这种方式的三个特点:

    a. 同时支持水平触发LT和边缘触发ET。

    LT(Level Triggered)是缺省的工作方式,同时支持block和no-block socket。在这种模式中,内核将就绪的文件描述符告诉进程后,进程可以对这个就绪的fd进行IO操作。如果进程不作任何操作,那么内核会在下次调用中继续将这些文件描述符报告给进程,所以,这种模式在编程中出错误可能性要小一点。传统的select/poll都是这种模型的代表.

    ET (edge-triggered)是高速工作方式,只支持no-block socket。在这种模式中,当文件描述符从未就绪状态变为就绪状态时,内核通过epoll报告给进程。然后内核会假设进程知道文件描述符已经就绪,并且不会再为这个(种)文件描述符发送更多的就绪通知,直到进程做了某些操作导致这个(种)文件描述符不再为就绪状态了(比如,进程在发送,接收或者接收请求,或者发送接收的数据少于一定量时导致 了一个EWOULDBLOCK 错误)。同时请注意,如果一直不对这个(种)fd作IO操作(从而导致它再次变成未就绪),内核不会发送更多的通知(only once)。不过在TCP协议中,ET模式的加速效用仍需要更多的benchmark确认。

    b. epoll模式在操作中获得就绪的文件描述符时,返回的不是实际的文件描述符,而是一个代表就绪文件描述符的值,然后在文件描述符数组中查询对应的的文件描述符。这样避免系统调用时候在内存中数据结构复制的开销。

    c. epoll采用事件通知方式。即每一个文件描述符都对应的注册了一个类似callback,当就绪激活时,通过callback和进程进行匹配操作。避免了select在每次调用的时候都遍历整个socket的扫描开销。

    因此epoll具备优势:支持一个进程打开大数目的socket描述符(FD);IO效率不随FD数目增加而线性下降;用mmap加速内核与用户空间的消息传递;和内核微调一起协调工作。

    注:似乎Apache主要采用的是select模式;而lighttpd和nginx主要采用epoll模式—带考证确认。


  • 根据Adobe 2009的数据,Adobe Flash Player拥有99%Desktop电脑设备和超过2百万的专业用户,稳然超过Java成为PC之上的第一平台了,其排名顺序依次是:Adobe Flash Player, Java, Apple Quicktime Player, Adobe Shockwave Player, RealOne Player。

    Adobe Flash Player

    在这个平台为王和Web 2.0的年代里面,Adobe在电脑终端平台里面,抢先一步;在最近互联网技术和架构里面,也可以看到Adobe的技术十分抢风头:)
  • 文章How Google uses Linux讨论了Google如何使用Linux的情况,其中有一些有意思的信息。
    1.Google一般在16-32个核的机器上面运行了大约5000个线程,平均每一个核上面运行了156-312个线程( 156-312 thread/core)。这个数据很值得参考、借鉴、验证。(And load balancing matters: Google runs something like 5000 threads on systems with 16-32 cores.)