吉行天下, 力挽狂澜

----------吉豕皮, 力一女共筑----------
随笔 - 35, 文章 - 2, 评论 - 3, 引用 - 0

导航

<2025年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

常用链接

留言簿(1)

随笔分类

随笔档案

文章分类

Download

博客集

网文集

网络相册

搜索

  •  

最新评论

阅读排行榜

评论排行榜

面试感悟

      工作总算搞定了,早就想记录下来我找工作的历程,也想好好反思一下面试的成功与失败,却因为论文的原因,一直没有时间来写,今天终于把论文发给导师了,知道写得不好,还是硬着头皮发了出去,想想真是悲哀.......
从实习的公司回来,就一直在反思,我适合做什么?在实习公司里,看到很多和我一样背景的人,看到他们,我就会想到一年或两年后的我,或许我就是他们中的一员,被项目牵着到处乱跑,像打游击一样,哪个项目需要,就往哪个项目里去,年复一年,日复一日地做着堆砌代码的工作,我不想这样,可是我这个行业决定了我未来的工作很可能就是这样。
      回来之后,我就把自己定位在非软件行业的IT部门,或者跟我原专业有关联的企业,因为我有企业工作的经验,又有原来机械专业的背景,所以也希望能找到这样的公司做相对对口的工作,或许能更有出路。
一流的软件公司好像都与我无缘,失去了一个我心仪的公司的机会,在郊区的一家半导体企业里,我找到了自信,连闯三关后,我顺利地得到了offer,几乎同时,也得到了一个软件公司的offer,也许是来得太过容易,我很快就做出了取舍,放弃了那家软件公司,心里总觉得有些不对,还是对自己说,这是自己想去的地方,虽然很远,也不想放弃,公司的确很不错,经理,hr,同事们都很nice,经理甚至还请我吃了顿午饭,然而第一天上班,我就傻眼了,这哪里是我想去的地方,一切都不自由,不能上网,不能安装软件,破机器还老死机,最要命的是每天上下班得在路上耗掉四个多钟头,这实在让我受不了,没办法,只好溜掉。
      之后经历了一个星期失业般的痛苦,之后接到一家软件公司的面试的通知,一面的感觉很好,和PM的交流是我面试感觉最好的一次,就像聊天一样,看得出来,PM对我的感觉也不错,他当时就告诉我会把我推荐给老总,连续四天的等待之后终于等到了二面的通知,见到了老总,一开始就觉得很压抑,和PM完全是两种类型的人,显得很不友好,而且似乎有些架子,我也没有给他留情面,没有因为他是老总就顺着他的意思回答他,在整个面试的过程中,我否绝了他的N多观点,当然都是觉得对我有“伤害”的观点。我始终觉得,即使我失去这份工作,也不能失去最起码的尊严。面试完毕,我对这份工作基本失去了信心,我想,如果我是面试的经理,我不会要一个处处意见和我不同的人。但是三天后,我就收到录用的通知,到现在,我还想不通,二面时,我在做什么?二面以后,发生了什么?还是一家软件公司,不过做的都是我感兴趣的东西。就在同时,我也去一家一流的世界500强公司参加了面试,而且我自信很快就会参加第二轮的面试,我也相信很有可能我也能获得这家公司的Offer,不过这家不是软件公司,却和我原专业有些关,马上又要面临新的选择,一个选择可能会影响我的一生,或许就是在这种不断的选择中,人才能成长和进步吧。

 

posted @ 2006-12-31 01:40 吉豕皮 阅读(158) | 评论 (0)编辑 收藏

关于进程和线程以及句柄

说法一:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.

一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行



说法二:进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:

简而言之,一个程序至少有一个进程,一个进程至少有一个线程.

线程的划分尺度小于进程,使得多线程程序的并发性高。

另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

线程在执行过程中与进程还是有区别的。每个独立的程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。



说法三:多线程共存于应用程序中是现代操作系统中的基本特征和重要标志。用过UNIX操作系统的读者知道进程,在UNIX操作系统中,每个应用程序的执行都在操作系统内核中登记一个进程标志,操作系统根据分配的标志对应用程序的执行进行调度和系统资源分配,但进程和线程有什么区别呢?

进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于:

线程的划分尺度小于进程,使得多线程程序的并发性搞。

另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

进程(Process)是最初定义在Unix等多用户、多任务操作系统环境下用于表示应用程序在内存环境中基本执行单元的概念。以Unix操作系统为例,进程是Unix操作系统环境中的基本成分、是系统资源分配的基本单位。Unix操作系统中完成的几乎所有用户管理和资源分配等工作都是通过操作系统对应用程序进程的控制来实现的。

C、C++、Java等语言编写的源程序经相应的编译器编译成可执行文件后,提交给计算机处理器运行。这时,处在可执行状态中的应用程序称为进程。从用户角度来看,进程是应用程序的一个执行过程。从操作系统核心角度来看,进程代表的是操作系统分配的内存、CPU时间片等资源的基本单位,是为正在运行的程序提供的运行环境。进程与应用程序的区别在于应用程序作为一个静态文件存储在计算机系统的硬盘等存储空间中,而进程则是处于动态条件下由操作系统维护的系统资源管理实体。多任务环境下应用程序进程的主要特点包括:

●进程在执行过程中有内存单元的初始入口点,并且进程存活过程中始终拥有独立的内存地址空间;

●进程的生存期状态包括创建、就绪、运行、阻塞和死亡等类型;

●从应用程序进程在执行过程中向CPU发出的运行指令形式不同,可以将进程的状态分为用户态和核心态。处于用户态下的进程执行的是应用程序指令、处于核心态下的应用程序进程执行的是操作系统指令。

在Unix操作系统启动过程中,系统自动创建swapper、init等系统进程,用于管理内存资源以及对用户进程进行调度等。在Unix环境下无论是由操作系统创建的进程还要由应用程序执行创建的进程,均拥有唯一的进程标识(PID)。

说法四:应用程序在执行过程中存在一个内存空间的初始入口点地址、一个程序执行过程中的代码执行序列以及用于标识进程结束的内存出口点地址,在进程执行过程中的每一时间点均有唯一的处理器指令与内存单元地址相对应。

Java语言中定义的线程(Thread)同样包括一个内存入口点地址、一个出口点地址以及能够顺序执行的代码序列。但是进程与线程的重要区别在于线程不能够单独执行,它必须运行在处于活动状态的应用程序进程中,因此可以定义线程是程序内部的具有并发性的顺序代码流。

Unix操作系统和Microsoft Windows操作系统支持多用户、多进程的并发执行,而Java语言支持应用程序进程内部的多个执行线程的并发执行。多线程的意义在于一个应用程序的多个逻辑单元可以并发地执行。但是多线程并不意味着多个用户进程在执行,操作系统也不把每个线程作为独立的进程来分配独立的系统资源。进程可以创建其子进程,子进程与父进程拥有不同的可执行代码和数据内存空间。而在用于代表应用程序的进程中多个线程共享数据内存空间,但保持每个线程拥有独立的执行堆栈和程序执行上下文(Context)。

基于上述区别,线程也可以称为轻型进程 (Light Weight Process,LWP)。不同线程间允许任务协作和数据交换,使得在计算机系统资源消耗等方面非常廉价。

线程需要操作系统的支持,不是所有类型的计算机都支持多线程应用程序。Java程序设计语言将线程支持与语言运行环境结合在一起,提供了多任务并发执行的能力。这就好比一个人在处理家务的过程中,将衣服放到洗衣机中自动洗涤后将大米放在电饭锅里,然后开始做菜。等菜做好了,饭熟了同时衣服也洗好了。

需要注意的是:在应用程序中使用多线程不会增加 CPU 的数据处理能力。只有在多CPU 的计算机或者在网络计算体系结构下,将Java程序划分为多个并发执行线程后,同时启动多个线程运行,使不同的线程运行在基于不同处理器的Java虚拟机中,才能提高应用程序的执行效率。

所谓句柄实际上是一个数据,是一个Long (整长型)的数据。

句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。

从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。

如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢?

为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。

句柄地址(稳定)→记载着对象在内存中的地址————→对象在内存中的地址(不稳定)→实际对象

本质:WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。

但是必须注意的是程序每次从新启动,系统不能保证分配给这个程序的句柄还是原来的那个句柄,而且绝大多数情况的确不一样的。假如我们把进入电影院看电影看成是一个应用程序的启动运行,那么系统给应用程序分配的句柄总是不一样,这和每次电影院售给我们的门票总是不同的一个座位是一样的道理。


线程是指程序的一个指令执行序列,WIN32 平台支持多线程程序,允许程序中存在多个线程。 在单 CPU 系统中,系统把 CPU 的时间片按照调度算法分配给各个线程,因此各线程实际上是分时执行的,在多 CPU 的 Windows NT 系统中, 同一个程序的不同线程可以被分配到不同的 CPU 上去执行。由于一个程序的各线程是在相同的地址空间运行的,因此设及到了如何共享内存, 如何通信等问题,这样便需要处理各线程之间的同步问题,这是多线程编程中的一个难点。

线程,也被称为轻量进程(lightweight processes)。计算机科学术语,指运行中的程序的调度单位。

线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程不拥有系统资源,只有运行必须的一些数据结构;它与父进程的其它线程共享该进程所拥有的全部资源。线程可以创建和撤消线程,从而实现程序的并发执行。一般,线程具有就绪、阻塞和运行三种基本状态。

在多中央处理器的系统里,不同线程可以同时在不同的中央处理器上运行,甚至当它们属于同一个进程时也是如此。大多数支持多处理器的操作系统都提供编程接口来让进程可以控制自己的线程与各处理器之间的关联度(affinity)。

进程是程序在一个数据集合上运行的过程(注:一个程序有可能同时属于

多个进程),它是操作系统进行资源分配和调度的一个独立单位,进程可以简单的分为系统进程(包括一般

Windows程序和服务进程)和用户进程



Linux下的进程和线程

可执行文件由指令和数据组成。进程就是在计算机上运行的可执行文件针对特定的输入数据的一个实例,同一个可执行程序文件如果操作不同的输入数据就是两个不同的进程。
线程是进程的一条执行路径,它包含独立的堆栈和CPU寄存器状态,每个线程共享其所附属的进程的所有的资源,包括打开的文件、页表(因此也就共享整个用户态地址空间)、信号标识及动态分配的内存等等。线程和进程的关系是:线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一物理内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。
Linux在核外采用1:1线程模型,即用一个核心进程(轻量进程)对应一个线程,将线程调度等同于进程调度,交给核心完成,而其它诸如线程取消、线程间的同步等工作,都是在核外线程库中完成的。因此可以把进程看作一组线程,这组线程拥有相同的线程组号(TGID),这个TGID就是这组线程序所附属的进程的ID号,每个线程的ID号就是我们用ps命令所看到的LWP号。
为了方便,从现在起我们用任务来代替进程和线程,即每提到任务,我们就是指线程和进程,除非要强调线程和进程之间的不同之处。任务的周期从被fork开始一直到给任务从进程表中消失。一个进程包括:正文段(text),数据段(data),栈段(STACK)和共享内存段(SHARED MEMORY)。

posted @ 2006-12-23 11:18 吉豕皮 阅读(923) | 评论 (0)编辑 收藏

如何点击链接以后弹出一个指定尺寸大小的另一个网页

function  openjsxx()  {
eval(
" winJS=window.open('test1.html','winJS','status=no,toolbar=no,menubar=no,location=no, width=142 top=100 

height=
" + eval( " screen.availHeight-120 " ) + "  left= " + eval( " screen.availWidth-160 " ) + " ') " );
在网页中:
<href="JavaScript:openjsxx();"><img src="images/xi.gif" border="0"></a> 

posted @ 2006-12-14 09:57 吉豕皮 阅读(573) | 评论 (0)编辑 收藏

关于轻量级和重量级的问题(AWT和SWING)

     摘要: 使用 AWT 时,屏幕上所看得到的组件都是继承自 java.awt.Component 而来。窗口、对话盒、 按钮、条列盒、下拉式条列盒 … 等,无一不是 Component。Swing 中亦是如此,所有的 Swing 组件都继承自 javax.swing.JComponent,而 JComponent 又继承自 Component。一个组件是轻量级或重量级的关键 就在于,它和底层的操作系统之间有...  阅读全文

posted @ 2006-11-26 19:28 吉豕皮 阅读(1078) | 评论 (0)编辑 收藏

C++对象的拷贝与赋值操作

拷贝构造函数,顾名思义,等于拷贝 + 构造。它肩负着创建新对象的任务,同时还要负责把另外一个对象拷贝过来。比如下面的情况就调用拷贝构造函数:

CString str = strOther;

 

赋值操作则只含有拷贝的意思,也就是说对象必须已经存在。比如下面的情况会调用赋值操作。

str = strOther;

 

不过有的对象是隐式的,由编译器产生的代码创建,比如函数以传值的方式传递一个对象时。由于看不见相关代码,所以不太容易明白。不过我们稍微思考一下,就会想到,既然是根据一个存在的对象拷贝生成新的对象,自然是调用拷贝构造函数了。

 

两者实现时有什么差别呢?我想有人会说,没有差别。呵,如果没有差别,那么只要实现其中一个就行了,何必要两者都实现呢?不绕圈子了,它们的差别是:

 

拷贝构造函数对同一个对象来说只会调用一次,而且是在对象构造时调用。此时对象本身还没有构造,无需要去释放自己的一些资源。而赋值操作可能会调用多次,你在拷贝之前要释放自己的一些资源,否则会造成资源泄露。

 

明白了这些道理之后,我们不防写个测试程序来验证一下我们的想法:

#include  < stdio.h >

#include 
< stdlib.h >

#include 
< string .h >

 

class  CString

{   

public :

    CString();

    CString(
const   char *  pszBuffer);

    
~ CString();

    CString(
const  CString &  other);

    
const  CString &   operator = ( const  CString &  other);

 

private :

    
char *  m_pszBuffer;;

}
;  

 

CString::CString()

{

    printf(
" CString::CString\n " );

    m_pszBuffer 
=  NULL;

 

    
return

}
   

        

CString::CString(
const   char *  pszBuffer)

{

    printf(
" CString::CString(const char* pszBuffer)\n " );

    m_pszBuffer 
=  pszBuffer  !=  NULL  ?  strdup(pszBuffer) : NULL;

 

    
return ;

}


CString::
~ CString()

{

    printf(
" %s\n " , __func__);

    delete m_pszBuffer;

    m_pszBuffer 
=  NULL;

 

    
return ;

}


 

CString::CString(
const  CString &  other)

{

    
if ( this   ==   & other)

    
{

        
return ;

    }


 

    printf(
" CString::CString(const CString& other)\n " );

    m_pszBuffer 
=  other.m_pszBuffer  !=  NULL  ?  strdup(other.m_pszBuffer) : NULL;

}


 

const  CString &  CString:: operator = ( const  CString &  other)

{

    printf(
" const CString& CString::operator=(const CString& other)\n " );

 

    
if ( this   ==   & other)

    
{

        
return   * this ;

    }


 

    
if (m_pszBuffer  !=  NULL)

    
{

        free(m_pszBuffer);

        m_pszBuffer 
=  NULL;

    }


         m_pszBuffer 
=  other.m_pszBuffer  !=  NULL  ?  strdup(other.m_pszBuffer) : NULL;

 

    
return   * this ;

}


 

void  test(CString str)

{

    CString str1 
=  str;

 

    
return ;

}


 

int  main( int  argc,  char *  argv[])

{

    CString str;

    CString str1 
=   " test " ;

    CString str2 
=   str1;

    str1 
=  str;

 

    CString str3 
=  str3;

 

    test(str);

 

    
return   0 ;

}


posted @ 2006-11-20 18:22 吉豕皮 阅读(179) | 评论 (0)编辑 收藏

求职信可能用到的句子

i would like to meet with you at your convenience to discuss this position and my qualifications for it in more detail.i learned a great deal about ABC from your campus recruiter.Nick Deane,and think it would be a terrific place to work.thank you for your time,I look forward to meeting with you.
I am enclosing another copy of my resume that i hope you will keep on file in the event that a position for which you think i am qualified becomes available.
i look forward to hearing from you some time in the future.
i have long been an admirer of your company and thought that my skills in marketing would make a valuable contributor.
thank you for the opportunity
i will call your office next week to see if we can schedule an appointment,i look forward to meeting you.
again,thank you for your consideration,if you need any additional information from me,please feel free to call.
i want to reiterate my strong interest in working for you,please keep me in mind if a similar position becomes available in the near future.again,thank you for the opportuinty to interview and best wishes to you and your staff.
对被拒绝的回应信
dear **
Thank you for giving me the opportunity to interview for the analyst trainee position.I appreciate your consideration and interest in me.
Although i am disappointed in not being selected for your current vacancy,i want you to know that i appreciated the courtesy and professionalism shown to me during the entire selection process.I enjoyed meeting you ,John fizgerald and firmed that distinguished fidelity would be an exciting place to work and build a career.
i want to rreterate my strong interest in working for you.please keep me in mind if a similar position becomes available in the near future.
you have a fine staff and i would have enjoyed working with them.

posted @ 2006-11-20 11:15 吉豕皮 阅读(190) | 评论 (0)编辑 收藏

绚丽字体这里贴

http://www.igogo8.com/
 
 
 
 

posted @ 2006-11-08 21:43 吉豕皮 阅读(110) | 评论 (0)编辑 收藏

Aglet(Mobile Agent)

一、简介

在分散式计算的 域中,有许多解决不同问题的技术,像是我们可以透过 RPC或RMI来使用固定在远端工作站上的函式,并且藉由讯息传递( message-passing)的方式来传送资料,以协调整个分散式计算;也可以利用mobile agents的特性 - 穿梭在网路许多工作站并执行各种特定任务,来做搜寻远端工作站上的目录资讯、更新档案、计算统计资料、或者与其他 agents沟通等工作。目前关於发展後者mobile agents系统的开发平台或执行环境有 Telescript、Agent Tcl、Ara(Agents for Remote Access )、以及Aglet等。

Aglet是由日本IBM 公司所提出,完全用Java发展的 mobile agent技术,并提供实用的平台-Aglets Workbench让我们开发或执行mobile agent系统。 Aglet 这个字是由"agile" 与"applet"两个字所合成的,简单的说就是具有agent行为的Java applet物件。它以执行绪( thread)的型态被产生於一台工作站,可随时暂停执行的工作,而後整个 aglet物件被分派到另一台工作站上,再重新启动执行任务。也因为aglets 是执行绪的型态,所以不会消耗太多的系统资源。以下将为读者介绍Aglet 的系统架构、Aglet 的物件模型( object model)与 packages、以及 Aglets Workbench 的元件。

二、架构

Aglets的系统架构主要分为四个阶段,请参见图1。首先当一个正在执行的 aglet想要将自己外送到远端时,会对 Aglets Runtime层发出请求,然後 Aglets Runtime层把aglet 的状态资讯与程式码转成序列化(serialized )之位元组阵列( byte array );接著若是外送的请求成功时,系统会将 aglet的执行动作结束,然後将位元组阵列传送至ATCI( Agent Transport and Communication Interface)层处理,此层提供使用ATP (Agent Transfer Protocol)的介面,其中ATP为一个简单的应用层协定 ( application-level protocol)(请参见图2),它使得我们不 顾虑aglets是否被派送到不同的 agent系统就可以传送aglets(也就是 agent-system-inde pendent);之後,系统会将位元组阵列附上相关的系统资讯,像是系统名称以及aglet的id等,并以bit stream 透过网路传至远端工作站[1] 。

图一、 Aglet的系统架构下图
图 2. ATP 的示意图
三、API包说明

Aglet系统首先 提供一个「环境」( context)来管理 aglet的基本行为:像是「产生」( create)、「复制」(clone)aglets ,或「分派」( dispatch)aglets 到远端工作站、「召回」(retract)远端的aglets,或「暂停」( deactive)、「唤醒」(active) aglets,以及「移除」(dispose) aglets等,请参见图 3。而aglet与aglet 之间的沟通,可用讯息传递的方式来传递讯息物件( message object)。此外,基於安全上的顾虑,aglets 并非让外界直接存取其资讯,而是透过一个代理者( aglet proxy)提供一致的介面与外界沟通,请参见图4。这样做还有一个好处 - aglet的所在位置会透明化( location transparency),也就是若想要与远端的aglet沟通时,只 在本地主机( local host)的 context上产生对应远端aglet的代理者,并与此代理者沟通即可,不必直接处理网路连线与通讯的问题[1] 。

图 3. Aglet的物件模型
图4. Aglet 基本功能介面

Aglet的packets包括如下:

  • com.ibm.aglet:这个packet定义aglet 的基本元件之类别:Aglet、AgletID 、AgletInfo、 AgletStub、 FutureReply、 Message、ReplySet ,以及介面: AgletContext、 AgletProxy、 MessageManager。
  • com.ibm.aglet.eve nt:Aglet的事件驱动模式分成Clone、 Mobility、 Persistency三种,其中Clone事件产生於复制aglets, Mobility事件产生於分派或取回 aglets等, Persistency事件产生於暂停或唤醒 aglets。
  • com.ibm.aglet.sys tem:主要提供控制 context的介面。
  • com.ibm.aglet.uti l:包括一些常用的物件,像是 AddressBook、 AddressChooser、 ImageData等。
  • com.ibm.agletx.pa tterns:将常用的系统架构design patterns,例如 Master-Slave、 Messenger-Receive r、以及 Notifier-Notifica tion。
四、Aglets Workbench

Aglets Workbench 目前提供的元件包括如下[2] :

  • The Aglets Framework for mobile Java agents: 提供一些特定的mobile agent之元件,以及常用的设计架构。
  • The Agent Transfer Protocol (ATP)
  • JDBC for DB2
  • Tahiti: 视觉化的管理介面,让使用者更方便管理 aglets。
  • Fiji: 它是独立的 package,提供在 web上透过Fiji applets来执行 aglet contexts,以做到产生、分派、召回aglets的功能。
五、范例说明

在此列举一简单之范例(请参见图 5、表 1、表 2):我们在本地工作站上产生一个LocalHost aglet,此aglet会动态产生一个新的 Hello aglet,然後将Hello aglet派送到远端工作站上执行,也就是列印 "Hello!"讯息。

首先说明LocalHost aglet: 在此程式中只有run()这个成员函数,是此aglet 执行绪本身进入执行状态的进入点。接著为了要动态产生一个新的aglet,必须透过 AgletContext来产生,并传回新的 aglet之proxy。然後透过proxy将新的 aglet派送到指定的远端工作站。

然後是Hello aglet : 在这个程式中有 run()和 onCreation()两个成员函数,其中 onCreation()会在本身aglet产生时被执行,先做一些初始化的动作,在此加入 MobilityListener( )这个介面,当有 Mobility事件发生时,即会执行适当的方法(method)。也就是说,若此 Hello aglet被分派时, MobilityListener( )会收到系统产生的 Mobility事件,然後执行 onDispatching()。接著进入run()函式,首先用一个布林变数判断本身是否在本地主机上。若不是则会印出" Hello!"讯息。

图 5. 范例程式的作用关系图


表 1. LocalHost.java

import com.ibm.aglet.*;

import java.net.*;

public class LocalHost extends Aglet{

	public void run(){
		URL codeBase;	//被create的aglet之class path。
		Object init;	//传给被create的aglet之初始物件参数。

	  try{
		// Create Hello aglet并取得其proxy。
		AgletProxy proxy = getAgletContext().createAglet(codeBase,"Hello",init);

	    try{
		proxy.dispatch(new URL("atp://remotehost"));	
		// 分派aglet到远端的主机。
	  } 
     catch(MalformedURLException e){
	     System.out.println(e);	
		 }
	  } 
      catch(Exception e){}

	}
}
										



表 2. Hello.java

import com.ibm.aglet.*;

import java.net.*;

public class LocalHost extends Aglet{

	public void run(){

	   URL codeBase;	//被create的aglet之class path。
       Object init;	//传给被create的aglet之初始物件参数。

	   try{
		// Create Hello aglet并取得其proxy。

		AgletProxy proxy = getAgletContext().createAglet(codeBase,"Hello",init);

    	try{
		proxy.dispatch(new URL("atp://remotehost"));	// 分派aglet到远端的主机。
	  }catch(MalformedURLException e){
	    System.out.println(e);
		}
	  }catch(Exception e){}
	}
}
										
六、参考资料
[1] Mitsuru Oshima and Guenter Karjoth, "Aglets Specification (1. 0)," http://www.trl.ibm.co.jp/aglets/spec_version10.html, May 20th, 1997.
[2] Danny B. Lange and Daniel T. Chang," IBM Aglets Workbench White Paper," http://aglets.trl.ibm.co.jp/documentation.html , September 9, 1996.
[3] Chong Xu and Dongbin Tao, "Building Distributed Application with Aglet," http://www.cs.duke.edu/~chong/aglet/, 1997.
[4] Danny B. Lange and Mitsuru Oshima, "Programming and Deploying Java Mobile Agents with Aglets," ISBN: 0-201-32582-9, 1998.

posted @ 2006-11-06 13:31 吉豕皮 阅读(490) | 评论 (0)编辑 收藏

93个经典开源项目集锦(包括URL)

 

1、Linux

http://www.linux.org/

2、FreeBSD

http://www.freebsd.org/

3、PostgreSQL

http://www.postgresql.org/

4、MySQL

http://www.mysql.org/

5、SAP DB

http://www.sapdb.org/

6、Hypersonic/Hsql

http://hsqldb.sourceforge.net/

7、McKoi

http://mckoi.com/database/

8、Xindice

http://xml.apache.org/xindice/

9、OJB

http://db.apache.org/ojb/

10、Hibernate

http://www.hibernate.org/

11、Castor

http://castor.exolab.org/

12、Torque

http://db.apache.org/torque/

13、JORM

http://jorm.objectweb.org/

14、XMLBeans

http://xml.apache.org/xmlbeans/

15、JiBX

http://jibx.sourceforge.net/

16、Castor

http://castor.exolab.org/

17、JAXB Reference Implementation

http://java.sun.com/xml/jaxb/

18、JaxMe

http://ws.apache.org/jaxme/

19、Tomcat

http://jakarta.apache.org/tomcat/

20、Jetty

http://jetty.mortbay.org/jetty/

21、JBoss

http://www.jboss.org/

22、Apache Geronimo

http://incubator.apache.org/projects/geronimo.html

23、JOnAS

http://jonas.objectweb.org/

24、OpenEJB

http://openejb.sourceforge.net/

25、OpenJMS

http://openjms.sourceforge.net/

26、JORAM

http://joram.objectweb.org/

27、JOTM

http://jotm.objectweb.org/

28、Struts

http://jakarta.apache.org/struts/

29、Cocoon

http://cocoon.apache.org/

30、Turbine

http://jakarta.apache.org/turbine/

31、Velocity

http://jakarta.apache.org/velocity/

32、Tapestry

http://jakarta.apache.org/tapestry/

33、WebWork

http://opensymphony.com/webwork/

34、Jetspeed

http://jakarta.apache.org/jetspeed/

35、Cocoon Portal

http://cocoon.apache.org/

36、Open For Business (OFBiz)

http://www.ofbiz.org/

37、Compiere

http://www.compiere.org/

38、InfoSapient

http://info-sapient.sourceforge.net/

39、JPOS

http://www.jpos.org/

40、Mercator

http://www.globalretailtech.com/

41、Cofax

http://www.cofax.org/

42、OpenCMS

http://www.opencms.org/opencms/

43、JasperReports

http://jasperreports.sourceforge.net/

44、DataVision

http://datavision.sourceforge.net/

45、JFreeReport

http://www.jfree.org/

46、JCharts

http://jcharts.sourceforge.net/

47、iText

http://www.lowagie.com/iText/

48、Apache FOP

http://xml.apache.org/fop/

49、POI

http://jakarta.apache.org/poi/

50、Cron

http://www.linux.org/

51、JCronTab

http://jcrontab.sourceforge.net/

52、Quartz

http://www.quartzscheduler.org/

53、Eclipse

http://www.eclipse.org/

54、NetBeans

http://www.netbeans.org/

55、SQuirreL

http://squirrel-sql.sourceforge.net/

56、TORA

http://www.globecom.se/tora/

57、DBVisualizer

http://www.minq.se/products/dbvis/

58、TOAD

http://www.toadsoft.com/

59、CVS

http://www.cvshome.org/

60、Subversion

http://subversion.tigris.org/

61、CVSWeb

http://www.freebsd.org/projects/cvsweb.html

62、ViewCVS

http://viewcvs.sourceforge.net/

63、DocBook

http://www.docbook.org/

64、OpenOffice

http://www.openoffice.org/

65、Structured Text

http://www.zope.org/Documentation/Articles/STX

66、MoinMoin Wiki

http://moin.sourceforge.net/

67、UseMod Wiki

http://www.usemod.com/cgi-bin/wiki.pl?UseModWiki

68、Jabber

http://www.jabber.org/

69、Mailman

http://www.gnu.org/software/mailman/

70、Eclipse Modeling Framework

http://www.eclipse.org/emf/

71、ArgoUML

http://argouml.tigris.org/

73、Poseidon Community Edition

http://www.gentleware.com/

74、XDoclet

http://xdoclet.sourceforge.net/

75、MiddleGen

http://boss.bekk.no/boss/middlegen/

76、Jostraca

http://www.jostraca.org/

77、JUnit

http://www.junit.org/

78、Cactus

http://jakarta.apache.org/cactus/

79、JMeter

http://jakarta.apache.org/jmeter/

80、Grinder

http://grinder.sourceforge.net/

81、Bugzilla

http://bugzilla.mozilla.org/

82、Scarab

http://scarab.tigris.org/

83、JIRA

http://www.atlassian.com/software/jira/

84、ITracker

http://www.cowsultants.com/

85、BeanShell

http://www.beanshell.org/

86、Jython

http://www.jython.org/

87、JRuby

http://jruby.sourceforge.net/

88、Groovy

http://groovy.codehaus.org/

89、AspectJ

http://eclipse.org/aspectj/

90、Ant

http://ant.apache.org/

91、Maven

http://maven.apache.org/

92、AntHill

http://www.urbancode.com/projects/anthill/

93、CruiseControl

http://cruisecontrol.sourceforge.net/

posted @ 2006-11-02 14:42 吉豕皮 阅读(163) | 评论 (0)编辑 收藏

anthill

Anthill is a framework aimed at supporting the design, development and analysis of peer-to-peer protocols and algorithms. The goals of Anthill are to: (i) provide an environment for simplifying the design and deployment of new P2P systems, and (ii) provide a "testbed'' for studying and experimenting with P2P systems in order to understand their properties and evaluate their performance. Anthill is based on the multi-agent systems (MAS) paradigm. A MAS is a collection of autonomous agents that can observe their environment and perform simple local computations leading to actions based on these observations. The behavior of an agent may be non-deterministic and its actions may modify the agent environment as well as the agent location within the environment. What distinguishes MAS from other agent models is that there is no central coordination of activity. MAS often exhibit a property called swarm intelligence whereby a collection of simple agents of very limited individual capabilities achieves ``intelligent'' collective behavior. In this manner, they are able to solve problems that are beyond the capabilities or knowledge of individual agents. For example, ant colonies, which are natural instances of MAS, are known to be capable of solving complex optimization problems including those arising in communication networks. In our opinion, MAS can be profitably adopted for the design of innovative peer-to-peer algorithms.
Anthill uses terminology derived from the ant colony metaphor. A P2P system based on Anthill is composed of a network of interconnected nests. Each nest is a peer entity capable of performing computations and hosting resources. Nests handle requests coming from users by generating one or more ants --- autonomous agents that travel across the nest network trying to satisfy the request. Ants interact indirectly with each other by modifying their environment by updating the information stored in the visited nests. This form of indirect communication, used also by real ants, is known as stigmergy.

Developers wishing to experiment with new P2P protocols need to focus only on writing appropriate ant algorithms using the Anthill API and defining the structure of the P2P system. The current version of Anthill includes a simulation environment to help developers analyze and evaluate the behavior of P2P systems. Ant algorithms are executed in simulated nest networks and various properties such as performance, fault-tolerance and availability are measured. Simulation parameters, such as the characteristics of the network, the type of ant algorithms deployed, the kind of workload presented to the system, and the properties to be measured, are easily defined using XML.

http://www.cs.unibo.it/projects/anthill/

posted @ 2006-11-02 14:05 吉豕皮 阅读(136) | 评论 (0)编辑 收藏

仅列出标题
共4页: 1 2 3 4