- 论坛徽章:
- 0
|
最新进展
我现在用NFSROOT方式,而不再采用RAMDISK ROOT方式来运行测试系统,不过需要重新配置和编绎Linux内核,配置好网卡驱动和启用内核IP配置和NFSROOT几个参数。还成功编绎了纯静态的MySQL,仍然需要编绎纯静态PHP所使用的技巧,实际只需要sql/mysqld这个可执行文件。
/etc/initrc.php可以采用如下的框架
if (posix_getpid() == 1) {
... # 直接通过操作系统调用接口而不是外部命令来直接配置Linux内核参数
if (pcntl_fork() == 0) { # 启动PHP FASTCGI服务器
posix_setuid(501);
$env['PHP_FCGI_CHILDREN'] = 10;
$env['PHP_FCGI_MAX_REQUESTS'] = 1000;
echo "starting fastcgi server.\r\n";
pcntl_exec('/usr/local/bin/php',array('-b',':8000'), $env);
echo "start fastcgi server FAILED!\r\n";
}
if (pcntl_fork() == 0) {
echo "starting mysql server.\r\n";
posix_setuid(502);
pcntl_exec('/usr/local/bin/mysqld',array('--skip-innodb','--skip-name-resolve'));
echo "start mysql server FAILED!\r\n";
}
sleep(1);
if ($mydb = mysql_connect('localhost','user','password')) {
echo "mysql server started.\r\n";
}
echo "READY.\r\n";
# 最关键的就是在以下部分使用php sockets接口以单进程多工技术来写一个HTTP服务器,来与fastcgi服务器通信,当然也必须能完成简单静态文件服务。
...
}
/etc/initrc.php不仅是系统初始化的脚本,也是每一个FASTCGI请求脚本的初始化脚本,因此我们可以把常用的过程定义在此文件中,对每一个脚本共享。
将mmcache静态编绎到PHP中可以提高initrc.php的加载执行效率,而且是必须采用的手段。
进一步的设想是将PHP和MySQL编绎在一起,做成单一可执行文件,这样PHP和MySQL可以共享原动态链接库的大量代码,进一步降低系统总的文件尺寸,用一个内核,一个程序来搞定一切!更绝的是,可以让PHP能够通过MySQL中更低级的函数接口来直接访问MySQL数据库,而不必总是通过SQL语言来访问MySQL数据库,这样可以获得更好的性能。而对于MySQL来说,设法让MySQL表达式能够使用PHP里面的某些函数,形成一种互惠互利的关系。
对PHP来说,还有一个地方值得注意的是Windows的PHP ISAPI模块使用了PHP的多线程运行模式,而在Linux下,我们能否让PHP FASTCGI服务器以多线程模式来运行?
我觉得对于传统的UNIX架构,适合于开发,而对于某种具体应用来说,就显得太复杂、太庞大了。一个操作系统是某种编程语言的世界,UNIX操作系统是C语言的世界,C语言是所有高级语言的基础,UNIX是所有高级操作系统之母。让我们有纯粹PHP的世界,纯粹Java世界,纯粹PERL世界,纯粹Python、纯粹Ruby世界,用一个内核+一个解释器彻底搞定一切。
[ 本帖最后由 zvxcv 于 2006-12-28 09:50 编辑 ] |
|