Feeds:
文章
迴響

Archive for 2010 年 11 月

最近使用 Shared Memory 作為 PHP 的 IPC 資料交換管道,一開始還蠻正常,可是如果長時間運作很容易就 Crash

如果以 CLI 方式執行 Process 會 Crash,如果以 Apache 的 CGI 方式執行則連 Apache 本身都會 Crash,真是強大的可以….

 

哪怎麼讓他 Crash 呢?很簡單只要

<?php
$shmid = shmop_open(9999, 'n', 0644, 42);
    shmop_close($shmid);            

    while(true){
        try{
           $shmid = shmop_open(9999, 'w', 0, 0);
           shmop_close($shmid);
            echo  date('y/m/d H:i:s') . " |  \n";         
        }catch(Exception $ex){
            echo 'exception' . "\n"; //
        }
        //usleep(3);    
    }
?>

而且連 Exception 都不會發生~~~~~ sleep 則有延後 crash 的效果…. 後來我決定放棄這麼不穩定的模組 T_T

Read Full Post »

.NET + WPF 的挫敗?

今天看到一則關於EverNote 的新聞(http://www.drdobbs.com/windows/228000453;jsessionid=GPI1YA5ILFU4BQE1GHPSKHWATMY32JVN) ,EverNote 是一套相當知名的筆記工具,文中提到 v4.0 捨棄原有 .NET + WPF 開發的程式而用 C++ 重新開發,因為他們遇到
1. 啟動時間緩慢
2. 佔用大量記憶體
3. 模糊的字型
4. 顯示卡支援不佳

我個人還沒有使用 WPF 在產品開發上,不過聽同事分享將 C 程式移到 WPF 後效能極差,而且還有嚴重 memory leak 問題。而且 WPF 一直未在 Microsoft 的主要產品中出現,雖然 VS2010 有使用 WPF,不過似乎也是部份使用。
撇開 WPF 不說,用 .NET 程式對於問題 1 和 2 還真的蠻常見的,問題 1 可透過一些方式稍微優化,問題 2 我還真的蠻頭大的,還沒找到什麼好的方案。
所以很多人都說考慮效能就不要用 .NET~

不過本來就沒有完美的東西,使用 .NET 開發程式的最大優勢就是產能高,輕輕鬆鬆就可以完成一個簡單的 HttpServer,如果用 C/C++ 就需要花不少功夫而且錯誤還不少….(迷之音:你是說 W team 寫的….)
我理想的語言中的語言是
1. 開發快
2. 執行效能佳
3. 記憶體耗用低
4. 可移植性佳
5. 容易整合其他語言

對於開發快這點我越來越在意,尤其是想要臨時寫個堪用小程式,還要注意程式語法細節和重複編譯除錯,我就快暈了~
我覺得比較好得開發方式是可用"互動方式"寫程式,此時可用來測試關鍵程式片段。接著將測試過的片段整理成為程式以直譯式執行測試程式。等程式測試完成後再編譯產生最佳效能的程式。
目前比較符合這個的語言是 Python,不過他也有 2 和 3 的問題,我希望未來能透過 pypy 或 LLVM 來改善。

之前有人推薦 Vala 語言,他採用類似 C# 語法,不過他卻可以產生 C Code 進而編譯成機械碼,兼具開發和執行優點,不過沒有實際玩過也不確定是不是真的這麼優 ~

Read Full Post »

今天用 PHP 寫了支 Daemon 程式在背景運作,過了一段時間後覺得整個系統運作緩慢,查看後才發現這隻 Daemon 居然已經耗用掉 8xxMB 記憶體。
我把問題片段刪減到剩下

while(true){
    microtime(true);
}

怪了,同樣的問題還是出現,原以為是 micotime 有問題,可是換成 Datetime->getTimestamp() 也一樣,網路上也沒有發現 microtime() 有 memory leak 的問題
後來猜想不會是因為我為了除錯而裝的 XDebug 造成的吧…
暫時移除 XDebug 後,哎呀呀… 記憶體沒有飆升了

白忙了一場,還錯怪 PHP :b

Read Full Post »