ååãé»åã¡ãŒã«ã§ãã¡ã€ã«ã®å 容ãèªã¿åãæäœã¯å¥ã®IOãšãŒãžã§ã³ãã«ä»»ããå¿ èŠããããšããäºå®ã«æ±ºçããŸããã ãããããŠãäœãèµ·ãããèŠãŠã¿ãŸãããã
æåã«ãIOãšãŒãžã§ã³ããšemail_analyzerãçžäºã«äº€æããäžé£ã®ã¡ãã»ãŒãžãå¿ èŠã§ãã
// . struct load_email_request { // . string email_file_; // . mbox_t reply_to_; }; // . struct load_email_succeed { // . string content_; }; // . struct load_email_failed { // . string what_; };
次ã«ãemail_analyzerãšãŒãžã§ã³ãããªã¯ãšã¹ãã¡ãã»ãŒãžload_email_requestãéä¿¡ããæ£ç¢ºãªå Žæã決å®ããå¿ èŠããããŸãã éåžžã®æ¹æ³ã§è¡ãããšãã§ããŸãïŒIOãšãŒãžã§ã³ããç»é²ãããšãããã®direct_mboxãä¿åãããã®mboxãã¢ãã©ã€ã¶ãŒãšãŒãžã§ã³ãã³ã³ã¹ãã©ã¯ã¿ãŒã«ãã©ã¡ãŒã¿ãŒãšããŠæž¡ãã次ã«åãšãŒãžã§ã³ãã®email_analyzerãšãŒãžã§ã³ãã³ã³ã¹ãã©ã¯ã¿ãŒã«ãã©ã¡ãŒã¿ãŒãæž¡ããŸã...åºæ¬çã«ãè€æ°ã®ç°ãªãIOãå¿ èŠãªå ŽåãšãŒãžã§ã³ãããããã©ã®ããã«è¡ãããã¹ããã§ãã ããããç§ãã¡ã®åé¡ã§ã¯ã1ã€ã®IOãšãŒãžã§ã³ãã§ååã§ãã ããã«ãããååä»ãmboxã®ãã¢ãè¡ãããšãã§ããŸãã
ååä»ãmboxã¯ãso_5 :: environment_t :: create_mboxïŒnameïŒãåŒã³åºãããšã«ãã£ãŠäœæãããŸãã åãååã§create_mboxãè€æ°ååŒã³åºããšãåãååã®create_mboxãæåã«åŒã³åºããããšãã«äœæãããåãmboxãåžžã«è¿ãããŸãã
IOãšãŒãžã§ã³ãã¯ååä»ãmboxãäœæãããµãã¹ã¯ã©ã€ãããŸãã Email_analyzerãšãŒãžã§ã³ãã¯ãload_email_requestã¡ãã»ãŒãžãéä¿¡ããå¿ èŠããããšãã«åãmboxãååŸããŸãã ãããã£ãŠãanalyzer_managerãä»ããŠmbox IOãšãŒãžã§ã³ããããã©ãã°ãããå¿ èŠããªããªããŸãã
IOãšãŒãžã§ã³ããšemail_manageréã®ã€ã³ã¿ãŒãã§ãŒã¹ã決å®ããã®ã§ã email_analyzerãšãŒãžã§ã³ãã®æ°ããããŒãžã§ã³ãäœæã§ããŸãã
// . IO- IO-. class email_analyzer : public agent_t { public : email_analyzer( context_t ctx, string email_file, mbox_t reply_to ) : agent_t(ctx), email_file_(move(email_file)), reply_to_(move(reply_to)) {} // , . // // . virtual void so_define_agent() override { // IO-. // . so_subscribe_self() .event( &email_analyzer::on_load_succeed ) .event( &email_analyzer::on_load_failed ); } virtual void so_evt_start() override { // IO- // email . send< load_email_request >( // mbox IO- . so_environment().create_mbox( "io_agent" ), email_file_, // mbox. so_direct_mbox() ); } private : const string email_file_; const mbox_t reply_to_; void on_load_succeed( const load_email_succeed & msg ) { try { // . auto parsed_data = parse_email( msg.content_ ); auto status = check_headers( parsed_data->headers() ); if( check_status::safe == status ) status = check_body( parsed_data->body() ); if( check_status::safe == status ) status = check_attachments( parsed_data->attachments() ); send< check_result >( reply_to_, email_file_, status ); } catch( const exception & ) { // - // email- . send< check_result >( reply_to_, email_file_, check_status::check_failure ); } // , , // . so_deregister_agent_coop_normally(); } void on_load_failed( const load_email_failed & ) { // . // . send< check_result >( reply_to_, email_file_, check_status::check_failure ); so_deregister_agent_coop_normally(); } };
Email_analyzerãšãŒãžã§ã³ãã¯ããããå¹ççã«è¡ãæ¹æ³ãç¥ã£ãŠããå¥ã®ãšãŒãžã§ã³ãã«IOæäœãå§ä»»ããããã«ãªããŸããã ãããã£ãŠãäœæ¥ã¹ã¬ããã®email_analyzerãšãŒãžã§ã³ãã¯ãIOãšãŒãžã§ã³ããžã®å²ãåœãŠãåŠçããããemail_analyzerå¿çãåŠçããŸãã ããã«ãããäœæã§ããemail_analyzerãšãŒãžã§ã³ãã®æ°ãšãå¿ èŠãªã¯ãŒã¯ã¹ã¬ããã®æ°ã®ãã¥ãŒãå€æŽããããšãã§ããŸãã
åemail_analyzerãšãŒãžã§ã³ãèªäœãåæIOæäœãå®è¡ããå Žåã䞊åIOæäœãèš±å¯ããã®ãšåãæ°ã®ã¯ãŒã¯ã¹ã¬ãããããŒã«ã«å ¥ããå¿ èŠããããŸããã ããŒã«å ã®äœæ¥ã¹ã¬ããã®æ°ãããå€ãã®email_analyzerãšãŒãžã§ã³ããäœæããŠãæå³ããããŸããã§ããã ããŒã«ã«16ã®ã¹ã¬ãããããã32ã®ãšãŒãžã§ã³ããåæã«ååšã§ããããã«ãããšããããã®ãšãŒãžã§ã³ãã®ååã¯ãäœæ¥ã¹ã¬ããã解æŸãããã®ãåã«åŸ ã€ããšã«ãªããŸãã
çŸåšãIOæäœãå¥ã®äœæ¥ã³ã³ããã¹ãã«ç§»åãããåŸããŸããããŒã«å ã®äœæ¥ã¹ã¬ããã®æ°ãæžããããšãã§ããŸãã ã€ãã³ãå ã®Email_analyzerãšãŒãžã§ã³ãã¯ãäž»ã«CPUããŒãæäœãå®è¡ããŸãã ãããã£ãŠãå©çšå¯èœãªåŠçã³ã¢ãããå€ãã®ã¯ãŒã¯ãããŒãäœæããŠãæå³ããããŸããã ãããã£ãŠã4ã³ã¢ããã»ããµãããå ŽåãããŒã«å ã«16ã¹ã¬ããã§ã¯ãªãã4ã¹ã¬ãã以äžã§ããå¿ èŠããããŸãã
次ã«ãIOæäœãé»åã¡ãŒã«ã®ã³ã³ãã³ãã®åŠçãããæéããããå ŽåãããŒã«å ã®ã¹ã¬ãããããå€ãã®email_analyzerãšãŒãžã§ã³ããäœæããæ©äŒãåŸãããŸãã åçŽã«ããããã®ãšãŒãžã§ã³ãã®ã»ãšãã©ã¯ãIOæäœã®çµæãåŸ ã¡ãŸãã ãã ããé»åã¡ãŒã«ã®ããŠã³ããŒãæéãã³ã³ãã³ãã®åææéã«å¹æµããããããããçãå Žåããã®ã¢ã€ãã ã¯é¢é£æ§ã倱ããããŒã«å ã®ã¹ã¬ããã®æ°ãããå€ã1-2-3 email_analyzerãšãŒãžã§ã³ãã®ã¿ãäœæã§ããŸãã ãããã®èšå®ã¯ãã¹ãŠãanalyzer_managerãšãŒãžã§ã³ãã§1ãæã§ç°¡åã«è¡ããŸãã ã³ãŒãå ã®ããã€ãã®å®æ°ãæåéãå€æŽããå€æŽããœãªã¥ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã«ã©ã®ããã«åœ±é¿ãããã確èªããã ãã§ååã§ãã ãã ããããã©ãŒãã³ã¹ãã¥ãŒãã³ã°ã¯å¥ã®å€§ããªãããã¯ã§ãããä»ããæãäžããã®ã¯ææå°æ©ã§ã...
ãããã£ãŠã以åã®ããŒãžã§ã³ã®åé¡ãä¿®æ£ããemail_analyzerãšãŒãžã§ã³ãã®æ¬¡ã®ããŒãžã§ã³ããããŸãã 蚱容ã§ãããšèããŠãããã§ããïŒ
ãã
åé¡ã¯ãçµæã®å®è£ ãä¿¡é Œã§ãããšèŠãªãããªãããšã§ãã
ãã®å®è£ ã¯ãéä¿¡ããã¡ãã»ãŒãžã倱ãããã«åžžã«å®å ã«å±ããšãã楜芳çãªã·ããªãªåãã«èšèšãããŠãããå®å ã«å±ããšåžžã«åŠçãããŸãã ãã®åŸãåžžã«å¿ èŠãªçããåŸãããŸãã
ãããã人çã®å³ããçå®ã¯ãã·ã¹ãã ãåã ã®ã¢ã¯ã¿ãŒ/ãšãŒãžã§ã³ãéã®éåæã¡ãã»ãŒãžäº€æã§æ§ç¯ãããŠããå Žåããã®åãéåæ亀æã¯çµ¶å¯Ÿã«ä¿¡é Œã§ãããã®ãšã¯èŠãªãããªããšããããšã§ãã ã¡ãã»ãŒãžã倱ãããå¯èœæ§ããããŸãã ãããŠãããã¯æ£åžžã§ãã
ã¡ãã»ãŒãžã®æ倱ã¯ããŸããŸãªçç±ã§çºçããå¯èœæ§ããããŸãã ããšãã°ãåä¿¡ãšãŒãžã§ã³ãã¯ãŸã ã¡ãã»ãŒãžããµãã¹ã¯ã©ã€ãã§ããŠããŸããã ãŸãã¯ãçŸæç¹ã§ã¯åä¿¡è ãšãŒãžã§ã³ãããŸã£ããããªãã ã©ã¡ããã§ãããéè² è·ä¿è·ã¡ã«ããºã ã¯æ©èœããŠããŸãïŒããã«ã€ããŠã¯åŸç¶ã®èšäºã§è©³ãã説æããŸãïŒã ãšãŒãžã§ã³ããããŠãã¡ãã»ãŒãžãå±ããŸãããããšãŒãžã§ã³ãã¯ãã®ã¡ãã»ãŒãžãåŠçãããŠããªãç¶æ ã§ãã ãšãŒãžã§ã³ããããŠãã¡ãã»ãŒãžã圌ã«å±ããåŠçãéå§ããŸããããåŠçäžã«äœããã®ã¢ããªã±ãŒã·ã§ã³ãšã©ãŒãçºçãã倱æãããšãŒãžã§ã³ãã¯å¿çãéä¿¡ããŸããã§ããã
äžè¬ã«ãéåæã¡ãã»ãŒãžãä»ãããšãŒãžã§ã³ãéã®éä¿¡ã¯ãUDPãããã³ã«ãä»ãããã¹ãã®å¯Ÿè©±ã«äŒŒãŠããŸãã ã»ãšãã©ã®å ŽåãããŒã¿ã°ã©ã ã¯åä¿¡è ã«å±ããŸãã ãã ããåŠçäžãŸãã¯åŠçäžã«å€±ãããããšããããŸãã
äžèšã¯ãload_email_requestãIOãšãŒãžã§ã³ãã«å°éããªãå¯èœæ§ãããããšãæå³ããŸãã ãŸãã¯ãå¿çã¡ãã»ãŒãžload_email_successed / load_email_failedãemail_analyzerãšãŒãžã§ã³ãã«å±ããªãå ŽåããããŸãã ãããŠããã®å Žåã¯ã©ããªããŸããïŒ
ã·ã¹ãã ã«ååšãããäœãããªãemail_analyzerãšãŒãžã§ã³ããååŸããŸãã åäœããŸããã æ»ã¬ã€ããã¯ãªãã ãŸããä»ã®email_analyzerãšãŒãžã§ã³ããéå§ããŸããã 幞éã§ãªããã°ãanalyzer_managerã«ãã£ãŠäœæããããã¹ãŠã®email_analyzerãšãŒãžã§ã³ãããäœãããªãåæ»äœã«å€ããç¶æ³ã«ééããå¯èœæ§ããããŸãã ãã®åŸãanalyzer_managerã¯åçŽã«é çªã«ãªã¯ãšã¹ããèç©ããã¿ã€ã ã¢ãŠããçµéãããšããããç Žæ£ããŸãã ãã ããæçšãªäœæ¥ã¯å®è¡ãããŸããã
ãã®ç¶æ³ããæãåºãæ¹æ³ã¯ïŒ
ããšãã°ãã¿ã€ã ã¢ãŠããå¶åŸ¡ããããšã«ããã email_analyzerãšãŒãžã§ã³ãã«ããIOæäœã®å®è¡æéã®å¶åŸ¡ãå°å ¥ã§ããŸãïŒã€ãŸããå¿çãé·ãããå ŽåãIOæäœã倱æãããšæ³å®ããŸãïŒã ãŸãã¯ãanalyzer_managerãšãŒãžã§ã³ãã§é»åã¡ãŒã«åææäœå šäœã®å®è¡æéãå¶åŸ¡ã§ããŸãã ãŸãã¯äž¡æ¹ãè¡ããŸãã
ç°¡åã«ããããã«ãemail_analyzerãšãŒãžã§ã³ã㧠IOæäœã®ã¿ã€ã ã¢ãŠããã«ãŠã³ãããããã«å¶éããŠããŸãïŒ
// . - IO-. class email_analyzer : public agent_t { // , // IO- . struct io_agent_response_timeout : public signal_t {}; public : email_analyzer( context_t ctx, string email_file, mbox_t reply_to ) : agent_t(ctx), email_file_(move(email_file)), reply_to_(move(reply_to)) {} virtual void so_define_agent() override { so_subscribe_self() .event( &email_analyzer::on_load_succeed ) .event( &email_analyzer::on_load_failed ) // - IO-. .event< io_agent_response_timeout >( &email_analyzer::on_io_timeout ); } virtual void so_evt_start() override { // IO- // email . send< load_email_request >( so_environment().create_mbox( "io_agent" ), email_file_, so_direct_mbox() ); // - IO-. send_delayed< io_agent_response_timeout >( *this, 1500ms ); } private : const string email_file_; const mbox_t reply_to_; void on_load_succeed( const load_email_succeed & msg ) { try { auto parsed_data = parse_email( msg.content_ ); auto status = check_headers( parsed_data->headers() ); if( check_status::safe == status ) status = check_body( parsed_data->body() ); if( check_status::safe == status ) status = check_attachments( parsed_data->attachments() ); send< check_result >( reply_to_, email_file_, status ); } catch( const exception & ) { send< check_result >( reply_to_, email_file_, check_status::check_failure ); } so_deregister_agent_coop_normally(); } void on_load_failed( const load_email_failed & ) { send< check_result >( reply_to_, email_file_, check_status::check_failure ); so_deregister_agent_coop_normally(); } void on_io_timeout() { // , -. send< check_result >( reply_to_, email_file_, check_status::check_failure ); so_deregister_agent_coop_normally(); } };
ãã®ãªãã·ã§ã³email_analyzerã¯ããã§ã«ããªãåãå ¥ãããããšèããããšãã§ããŸãã 圌ã®ã³ãŒãã§ã¯ããªãã¡ã¯ã¿ãªã³ã°ã¯ãããã€ãã®æäœïŒsendããã³so_deregister_agent_coop_normallyïŒãå¥åã®ãã«ããŒã¡ãœããã«çµã¿èŸŒãããšãææ¡ããŠããŸãã ãã ããããã¯æå³çã«è¡ããããã®ã§ã¯ãªããããemail_analyzerãšãŒãžã§ã³ãã®åŸç¶ã®åããŒãžã§ã³ã®ã³ãŒãã¯ãåã®ããŒãžã§ã³ã®ã³ãŒããšæå°éã®éããããããŸããã
äžèšã®email_analyzerãšãŒãžã§ã³ãã®2ã€ã®ããŒãžã§ã³ãæ¯èŒãããšãæ¥åžžæ¥åã§SObjectizerãé·å¹Žäœ¿çšããŠããããã°ã©ããŒã«é«ãè©äŸ¡ãããŠãã1ã€ã®æ©èœãããããŸããããã¯ããšãŒãžã§ã³ãæ¡åŒµæé ã®åçŽããšããããããã§ãã ãšãŒãžã§ã³ãã¯å¥ã®ã€ãã³ãã«å¿çããå¿ èŠããããŸãããïŒ ãã®ãããå¥ã®ãµãã¹ã¯ãªãã·ã§ã³ãšå¥ã®ã€ãã³ããã³ãã©ãŒãè¿œå ããå¿ èŠããããŸãã éåžžããµãã¹ã¯ãªãã·ã§ã³ã¯åãå Žæã§è¡ããããããã©ãã«è¡ã£ãŠäœãç·šéããããããã«ããããŸãã
SObjectizerã¯ããšãŒãžã§ã³ããã€ãã³ããæžã蟌ãå Žæãšæ¹æ³ã«å¶éã課ããŸããããåçŽãªåæã«åŸããŸã-ãµãã¹ã¯ãªãã·ã§ã³ã¯so_define_agentïŒïŒã§è¡ãããéåžžã«åçŽãªå ŽåããšãŒãžã§ã³ãã®æçµã¯ã©ã¹ãã³ã³ã¹ãã©ã¯ã¿ãŒã§-ç掻ãå€§å¹ ã«ç°¡çŽ åããŸãã ããªãã¯ä»ã®èª°ãã®ãšãŒãžã§ã³ãã®ã³ãŒããŸãã¯ããªãã®ãšãŒãžã§ã³ãã®ã³ãŒãããèŠãŸãããæ°å¹Žåã«æžãããŠããããšãŒãžã§ã³ãã®æ¯ãèããç解ããããã«äœãèŠãå¿ èŠããããããã«ããããŸãã 䟿å©ã§ããããã®äŸ¿å©ããç解ããã«ã¯ãããããè€æ°ã®å®éã®ãšãŒãžã§ã³ãããŸãã¯2ã€ä»¥äžã®ãšãŒãžã§ã³ããäœæããŠãããã°ããå¿ èŠããããŸãã
ãã ããäžèšã§æããããemail_analyzerãšãŒãžã§ã³ãã®æ¬¡ã®6çªç®ã®ããŒãžã§ã³ãç»å ŽããããããšãŒãžã§ã³ãã®ä¿¡é Œæ§ã®ãããã¯ã«æ»ããŸãããããšãŒãžã§ã³ãéã®éåæã¡ãã»ãŒãžã³ã°ã®ã¡ã«ããºã ã¯ä¿¡é Œã§ããŸãã ã
ããã§éèŠãªçºèšãããå¿ èŠããããŸããSObjectizerã®ã¡ãã»ãŒãžé ä¿¡ã¡ã«ããºã ã¯æ¬åœã«ãæŒããããããšèšã£ãŠééã£ãŠãããå¿ èŠã«å¿ããŠã¡ãã»ãŒãžã倱ãããšãã§ããŸãã
SObjectizerã®ã¡ãã»ãŒãžã¯åã«å€±ãããã®ã§ã¯ãªãããã¹ãŠã®æ倱ã«ã¯ç¬èªã®çç±ããããŸãã ãšãŒãžã§ã³ããèªèº«ã«ã¡ãã»ãŒãžãéä¿¡ããéä¿¡æ©èœãæåããå Žåãã¡ãã»ãŒãžã¯ãšãŒãžã§ã³ãã«å±ããŸãã éçºè èªèº«ãç¹å®ã®ã±ãŒã¹ã§SObjectizerã«ãã®ã¡ãã»ãŒãžãã¹ããŒããããã«æ瀺çã«äœããã®ã¢ã¯ã·ã§ã³ããšããªãéãïŒããšãã°ãéçºè ã¯ããããã®ç¶æ ã§ãšãŒãžã§ã³ããã¡ãã»ãŒãžã«ãµãã¹ã¯ã©ã€ãããªãããlimit_then_dropã䜿çšããŠéè² è·ããä¿è·ããŸãïŒã
ãã®ãããéçºè èªèº«ãç¹å®ã®ç¶æ³ã§SObjectizerãç¹å®ã®ã¡ãã»ãŒãžãã¹ããŒããããšãèš±å¯ããªãå ŽåããšãŒãžã§ã³ããèªåã«éä¿¡ããã¡ãã»ãŒãžã¯ãšãŒãžã§ã³ãã«å±ãã¯ãã§ãã ãããã£ãŠãäžèšã®ã³ãŒãã§ã¯ãä¿çäžã®ã¡ãã»ãŒãžãéäžã§å€±ãããããšãæããã«ãå®å šã«èœã¡çããŠã¡ãã»ãŒãžãéä¿¡ããŸããã
ãã ããã¡ãã»ãŒãžãå¥ã®ãšãŒãžã§ã³ãã«éä¿¡ããããšãç¶æ³ã¯å€å°å€ãããŸãã é éã®æåã«èªä¿¡ãããå ŽåããããŸãã ããšãã°ãç§ãã¡èªèº«ãåä¿¡è ãšãŒãžã§ã³ããå®è£ ããéä¿¡è ãšãŒãžã§ã³ããäœãã§ããã®ãšåãååã«ãããå«ããå Žåã§ãã
ããããåä¿¡è ãšãŒãžã§ã³ããç§ãã¡ã«ãã£ãŠæžãããŠããªãå Žåãå€åœã®ååã®äžç°ãšããŠäœæããã³ç Žæ£ããããã®åäœãå¶åŸ¡ããªãå ŽåããšãŒãžã§ã³ããéè² è·ããã©ã®ããã«ä¿è·ãããããç¹å®ã®ç¶æ³ã§ã©ã®ããã«åäœããããããããªãå Žåãèªä¿¡ããããŸãUDPãããã³ã«ãä»ããŠããŒã¿ã°ã©ã ãéä¿¡ããå Žåãšåãã§ãããã¹ãŠãæ£åžžã§ããã°ãããŒã¿ã°ã©ã ãéä¿¡è ã«å°éããå¿çãè¿ãããå¯èœæ§ãé«ãã§ãã ãã¹ãŠãããŸãããã°ã ããããããã§ãªãå Žåã¯ïŒ
èå³æ·±ãç¹ã«æ¥ãŸãããéåæã¡ãã»ãŒãžã³ã°ã®çžå¯Ÿçãªä¿¡é Œæ§ãäœããããã¢ã¯ã¿ãŒ/ãšãŒãžã§ã³ãã§ã®ãœãããŠã§ã¢éçºã¯ãããã°ã©ã å ã®ãªããžã§ã¯ãã®åæçžäºäœçšã«åºã¥ãã¢ãããŒãã䜿çšããå Žåãããæéããããããã«èŠããŸãã
æã ããã§ãã ããããæçµçã«ãç§ãã¡ã®æèŠã§ã¯ããœãããŠã§ã¢ã¯ããä¿¡é Œæ§ãé«ããªããŸãã ã³ãŒãã§ã¯ãã¡ãã»ãŒãžã®æ倱ãšãã¡ãã»ãŒãžã®é ä¿¡ããã³åŠçæéã®å€åã®äž¡æ¹ã«é¢é£ããå€ãã®ç·æ¥äºæ ãåŠçããå¿ èŠããããŸãã
email_analyzersãéåæã¡ãã»ãŒãžã§ã¯ãªãåæèŠæ±ãä»ããŠio_agentã«ã¢ã¯ã»ã¹ããio_agentãäŸå€ãã¹ããŒããããšã§IOæäœäžã®é害ã«ã€ããŠéç¥ãããšããŸãã é·ãéããã¹ãŠãæ£åžžã«æ©èœããŸããemail_analyzerã¯io_agentãåæçã«èŠæ±ããããã«å¿ããŠé»åã¡ãŒã«ã®å 容ãŸãã¯äŸå€ãåä¿¡ããŸãã ããããããæç¹ã§ãio_agentå ã®ã©ããã«é ãããã°ãçŸããåæåŒã³åºãããã³ã°ããŸãã çããäŸå€ããªãããã åçµããã ãã§ãã ãããã£ãŠã1ã€ã®email_analyzerãæåã«ãã³ã°ãã次ã«å¥ã®ã¡ãŒã«ã次ã«å¥ã®ã¡ãŒã«ãªã©ããã³ã°ããŸãã ãã®çµæãã¢ããªã±ãŒã·ã§ã³å šäœãäžæãããŸãã
äžæ¹ãéåæã¡ãã»ãŒãžã³ã°ã§ã¯ãio_agentãšãŒãžã§ã³ãã¯ãã®Gibletsã®ã©ããã«ãã³ã°ããå¯èœæ§ããããŸãã ãã ããããã¯email_analyzerãšãŒãžã§ã³ãã«ã¯åœ±é¿ããŸãããemail_analyzerãšãŒãžã§ã³ãã¯ããªã¯ãšã¹ãã¿ã€ã ã¢ãŠãã®æå¹æéãç°¡åã«è¿œè·¡ããåŠå®çãªçµæãéä¿¡ã§ããŸãã ã€ãŸããã¢ããªã±ãŒã·ã§ã³ã®äžéšã§é害ãçºçããå Žåã§ããã¢ããªã±ãŒã·ã§ã³ã®ä»ã®éšåã¯äœæ¥ãç¶è¡ã§ããŸãããã®äœæ¥ã§ã¯ãåŠå®çãªå¿çã®ã¹ããªãŒã ãçæããããšã«ãªããŸãã çµå±ã®ãšããããã®ãããŒã®å®éã¯éèŠãªçç¶ã«ãªããã¢ããªã±ãŒã·ã§ã³ã§äœããããŸããããªãã£ãããšããªãã¶ãŒããŒã«äŒããããšãã§ããŸãã
ãšããã§ããšãŒãžã§ã³ãã§æžãããã¢ããªã±ãŒã·ã§ã³ã®äœæ¥ãç£èŠãããšãããããã¯ã«ã€ããŠã
SObjectizerãšã®é·å¹Žã®äœæ¥ãéããŠãã¢ã¯ã¿ãŒ/ãšãŒãžã§ã³ãäžã«æ§ç¯ãããã¢ããªã±ãŒã·ã§ã³ã®å éšã§äœãèµ·ãã£ãŠããããèŠãèœåãéåžžã«éèŠã§ãããšãã信念ãçºå±ãããŠããŸããã ååãšããŠãããã¯ãã®èšäºã§ã瀺ãããŠããŸãã ã¿ã€ã ã¢ãŠãå¶åŸ¡ãªãã§email_analyzerã®5çªç®ã®ããŒãžã§ã³ã䜿çšããŠå®è¡ããããšãããšããªã¯ãšã¹ãåŠçãåæ¢ãããŸã§é床ãäœäžããæ§åãèŠãããšãã§ããŸãã ããããåé¡ãäœã§ããããæ£ç¢ºã«ç解ããæ¹æ³ã¯ïŒ
çŸåšäœæãããŠããemail_analyzerãšãŒãžã§ã³ãã®æ°ãšåãšãŒãžã§ã³ããäœãããŠããã®ãã«ã€ããŠã®æ å ±ã¯ãè¯ãæããããäžããããšãã§ããŸãã ããã«ã¯ãã¢ããªã±ãŒã·ã§ã³å ã§äœãèµ·ãã£ãŠããããç£èŠããæ©èœãå¿ èŠã§ãã ããã¯ãŸãã«ãErlangãšãã®ãã©ãããã©ãŒã ãéåžžã«é«ãè©äŸ¡ãããŠãããã®ã§ããããã§ã皌åäžã®Erlang VMã«æ¥ç¶ããErlangããã»ã¹ã®ãªã¹ãããããã®ãã©ã¡ãŒã¿ãŒãªã©ãèŠãããšãã§ããŸãã ããããErlangã§ã¯ãErlangã¢ããªã±ãŒã·ã§ã³ãErlang VMãå®è¡ããŠããããããããå¯èœã§ãã
ãã€ãã£ãC ++ã¢ããªã±ãŒã·ã§ã³ã®å Žåãç¶æ³ã¯ããè€éã§ãã SObjectizer Environmentå ã§äœãèµ·ãã£ãŠããããç£èŠããããã®ããŒã«ãSObjectizerã«è¿œå ãããŸããïŒãããã®ããŒã«ã¯ãŸã æãåºæ¬çãªæ©èœã®ã¿ãæäŸããŸããïŒã ãããã£ãŠã圌ãã®å©ããåããŠã ãã¢ã¢ããªã±ãŒã·ã§ã³ã®äœæ¥äžã«ã次ã®æ å ±ãååŸã§ããŸãã
mbox_repository / named_mbox.count-> 1 coop_repository / coop.reg.count-> 20 coop_repository / coop.dereg.count-> 0 coop_repository / agent.count-> 20 coop_repository / coop.final.dereg.count-> 0 timer_thread / single_shot.count-> 0 timer_thread / periodic.count-> 1 disp / ot / DEFAULT / agent.count-> 3 disp / ot / DEFAULT / wt-0 / demands.count-> 8 disp / tp /ã¢ãã©ã€ã¶ãŒ/ threads.count-> 4 disp / tp / analysers / agent.count-> 16 disp / tp /ã¢ãã©ã€ã¶ãŒ/ cq / __ so5_au ... 109 __ / agent.count-> 1 disp / tp /ã¢ãã©ã€ã¶ãŒ/ cq / __ so5_au ... 109 __ / demands.count-> 0 disp / tp /ã¢ãã©ã€ã¶ãŒ/ cq / __ so5_au ... 124 __ / agent.count-> 1 disp / tp /ã¢ãã©ã€ã¶ãŒ/ cq / __ so5_au ... 124 __ / demands.count-> 0 ... disp / tp /ã¢ãã©ã€ã¶ãŒ/ cq / __ so5_au ..._ 94 __ / agent.count-> 1 disp / tp /ã¢ãã©ã€ã¶ãŒ/ cq / __ so5_au ..._ 94 __ / demands.count-> 0 disp / ot / req_initiator / agent.count-> 1 disp / ot / req_initiator / wt-0 / demands.count-> 0
ãã®ç£èŠæ å ±ã®æ¯æžã«ããã4ã€ã®ã¯ãŒã¯ãããŒãæ©èœãããã¢ãã©ã€ã¶ãŒããšåŒã°ããã¹ã¬ããããŒã«ãæã€ãã£ã¹ãããã£ãŒãããããšãç解ã§ããŸãã ãã®ãã£ã¹ãããã£ã§ã¯ãemail_analyzerãšãŒãžã§ã³ãããã®äŸã§æ©èœããŸãã 16ã®ãšãŒãžã§ã³ãããã£ã¹ãããã£ã«æ¥ç¶ãããŠããããããããåå¥ã®ååãæ§æããŠããŸãã ãããŠããããã®ãšãŒãžã§ã³ãã«ã¯ã¢ããªã±ãŒã·ã§ã³ããããŸããã ã€ãŸãããšãŒãžã§ã³ãã¯ååšããŸããã圌ãã®ããã®ä»äºã¯ãããŸããã ãããŠãããã¯ãªããããèµ·ãã£ãã®ããç解ããæ©äŒã§ãã
æããã«ãSObjectizer Environmentã§å©çšå¯èœãªäœã¬ãã«ã®æ å ±ã¯ãã¢ããªã±ãŒã·ã§ã³ããã°ã©ããŒã«ãšã£ãŠåžžã«åœ¹ç«ã€ãã®ã§ã¯ãããŸããã è°è«äžã®äŸã§ã¯ãemail_analyzerãšãŒãžã§ã³ãã®æ°ã®ã«ãŠã³ã¿ãŒãšãanalyzer_managerãšãŒãžã§ã³ãå ã®ãªã¯ãšã¹ãã®ãªã¹ãã®é·ãã®ãµã€ãºã¯ãéçºè ã«ããå€ãã®å©çãäžããããšãã§ããŸãã ããããããã¯é©çšãããããŒã¿ã§ãããSObjectizerã¯ããã«ã€ããŠäœãç¥ããŸããã ãããã£ãŠããšãŒãžã§ã³ãã§ã¢ããªã±ãŒã·ã§ã³ãéçºããå Žåãããã°ã©ããŒã¯ãã¢ããªã±ãŒã·ã§ã³ã®æ£åžžæ§ãšå®è¡å¯èœæ§ãè©äŸ¡ããã®ã«æã圹ç«ã€ãã¢ããªã±ãŒã·ã§ã³å€éšã®æ å ±ãå©çšå¯èœã§ããããšã確èªããå¿ èŠããããŸãã ããã¯ãã§ã«å¥ã®è°è«ã®å€§ããªãããã¯ã§ããã
ãããããããã¯ããªããçµããããšãã§ãã次ã®èšäºã§ãã 次ã®èšäºã§ã¯ãé»åã¡ãŒã«åææäœãããã«äžŠååããããšããå Žåã«äœãã§ãããã瀺ããŸãã ããšãã°ãããããŒãã¬ã¿ãŒã®æ¬æãæ·»ä»ãã¡ã€ã«ã®äžŠè¡åæãå®è¡ããå Žåã ãããŠãemail_analyzerãšãŒãžã§ã³ãã®ã³ãŒãã¯äœã«ãªããŸããã
èšäºã«ç€ºãããŠããäŸã®ãœãŒã¹ã³ãŒãã¯ã ãã®ãªããžããªã«ãããŸã ã