가끔 사차원이 떠요
문득 이런 생각이 들어쩌.
지난해에 하였던 닷넷 php서버는 php-cli에 컨텍스트 전환이 계속되면 서버가 터지는 현상이 비롯되었고 이거는 닷넷이나 php어디서 터지는 거인지 식별이 안되었는데 이럼 컨텍스트 전환을 한번만 해버리면 어떠나요.
전에 거는 aspnetcore → php-cli 이 과정을 http 컨텍스트를 그대로 사용하거나 새 스레드 컨텍스트를 사용하거나 두 가지 기법을 사용하였는데 둘 다 터져서 앵간하게 실망하여쩌.
위에 문제는 php-cli에 결과를 반환하는데 컨텍스트를 정리하면서 닷넷에 컨텍스트를 잘못 건드렸을 거여요. 닷넷 태스크는 C/C++에서 구현처럼 스레드 컨텍스트를 개발자가 정의하지 못하여서 결과적으로 php-fpm처럼 프로세스를 분리해줘야 해요.
사실 안해본 거는 php-cli가 컨텍스트를 망가뜨린다고 가정하고 컨텍스트 전환이 이루어지기 전에 백업을 치면 해결될 여지도 이쩌. php는 스레드 세이프 빌드이면 tsrm_tls_get tsrm_tls_set 이 부분으로 컨텍스트를 건드려요.
php-src/TSRM/TSRM.c at master · php/php-src · GitHub
php가 스크립트를 종료하면서 컨텍스트를 매번 비운다는 거도 좀 불편하여야지 이케이케 하면 좋아요. 이거는 스크립트를 마치는 코드에 순환 루프를 걸어서 8-128이거나 512 내지는 1024회 재사용을 하고 컨텍스트를 비우도록 한다면 앵간하게 더 빨라지는 여지가 커요.
전에 php 5.2에서 이런 문제가 있었다 하여서 어지러워요.
PHP: Performance Considerations - Manual
물론 php 컨텍스트에서 무한 순환을 걸어 가지고 컨텍스트 전환이 없으면 좋은데 이거는 php에서 include, require 같은 거로 읽어온 스크립트를 소거하거나 새로이 읽어오는 기능이 없어서 망해쩌. 노드js는 require.cache에 이름을 지워서 소멸 시켜버리면 되는 아주 심한 차이가 있어요.
닷넷 서버는 결과적으로 php를 붙이던 파이썬을 붙이던 .. 가장 안전한 거는 공유 메모리를 걸어서 프로세스를 분리하면서도 컨텍스트를 종료하지 않고 계속 유지하는 거여요.
위에 프로젝트는 오래 방치하여서 다음에 어뜨케 건드리는지 예상 안되는데요. 어떡하나요.
