PHP

2010-11-23 15 views
6

में सबसे तेज़ आईपीसी मुझे आश्चर्य है, एक प्रक्रिया से डेटा को PHP में दूसरे में भेजने का सबसे तेज़ तरीका कौन सा है? डेटा केवल एक छोटी स्ट्रिंग है। संक्षेप में मेरे पास AF_UNIX सॉकेट विकसित किए गए समाधान हैं, लेकिन बेंचमार्क दिखाते हैं कि डेटा को एक प्रक्रिया से दूसरे में पास करने के लिए 0.100 एमएस लगते हैं। मुझे आश्चर्य है, अगर साझा स्मृति किसी भी तेजी से हो सकती है? हालांकि, मुझे कोई जानकारी नहीं है, अगर कोई नया डेटा लिखे गए हैं, तो दूसरी प्रक्रिया को नियमित रूप से साझा करने के लिए साझा स्मृति की जांच कैसे करें?PHP

वर्तमान समाधान:

$server = socket_create(AF_UNIX, SOCK_STREAM, 0); 
socket_bind($server, '/tmp/mysock'); 
socket_listen($server); 
while(true) { 
    $r = $clients; 
    if(socket_select($r, $w, $e, 5) > 0) { 
    $client = socket_accept($server); 
    $d = trim(socket_read($client, 256, PHP_NORMAL_READ)); 
    echo (microtime(true)-$d)."\n"; 
    socket_close($client); 
    } 
    flush(); 
} 
socket_close($server); 

और ग्राहक:

$d = microtime(true)."\n"; 
$socket = socket_create(AF_UNIX, SOCK_STREAM, 0); 
socket_connect($socket, '/tmp/mysock'); 
socket_write($socket, $d, strlen($d)); 
socket_close($socket); 

यह समाधान पूरी तरह से काम करता है, ठीक है, लेकिन परिणाम इस तरह हैं:

0.00019216537475586 
9.5129013061523E-5 
0.00011920928955078 
0.00011801719665527 
7.6055526733398E-5 

कोई भी विचार, कैसे करने के लिए इस स्क्रिप्ट को तेजी से या तेजी से (संभवतः साझा स्मृति) समाधान विकसित करने के लिए?

अग्रिम धन्यवाद, जोनास

+0

क्या आप * निश्चित * हैं कि यह आपकी बाधा है? अपने बेंचमार्क से बताना मुश्किल है, लेकिन ऐसा लगता है कि आप इसे क्लाइंट और सर्वर के बीच मिलीसेकंड से नीचे कर रहे हैं। शायद आप अपने प्रश्न में अपने बेंचमार्क को स्पष्ट कर सकते हैं। –

+0

क्या कोई स्पष्ट कारण है कि आप पॉज़िक्स थ्रेड का उपयोग नहीं कर सकते हैं, या आपको अलग प्रक्रियाओं का उपयोग करना होगा। – SingleNegationElimination

+0

मुझे लगता है कि थ्रेड काम कर सकते हैं, क्योंकि प्रक्रियाओं को शामिल किया जा सकता है, हालांकि, यह नहीं पता कि यह कैसे करें :) – flyeris

उत्तर

1

साझा स्मृति प्रक्रियाओं के बीच डेटा interchnage का सबसे तेज़ तरीका है। सिंक्रनाइज़ेशन के लिए semaphores का उपयोग करें।