정말 놀랐습니다 ㅋㅋㅋ 쓰러짐 +_+

최근에 Web 관련해서 Project를 하기 때문에

System Language인 JAVA, C, Assembly, JSP, Ajax, Struts, Hibernate, Spring, Oracle등을 연동하고 있습니다.

 

그냥 이번에 Open Source Cummunity 관련해서도 Homepage를 구축하고자 겸으로 하고 있는데, 아주 재밌는 것을 생각했습니다.

 

어째서 JNI(Java Native Interface)라는 것을 사용하는가 ?!

JIT(Just-In-Time) Compiler와 Debugger의 필요성은 무엇인가 ?!

 

에 대한 근본적인 해답을 얻은 것 같습니다.

코드 분석을 통해서 이러한 동작을 한다는 것은 알았지만,

실제적으로 Architecture와 연동해서 생각할 때, 이러한 것들이 왜 필요한가에 대한 근본적인 해답이죠 !!!!

 

Ajax(Asynchronous Javascript And XML)은 함수 포인터와 같은 개념으로 Data를 비동기 처리 합니다.

비동기 처리하기 때문에 속도와 효율성면에서 뛰어남을 느낄 수 있습니다.

하지만, 문제점은 바로 이것이였죠 ㅡ_ㅡㅋㅋㅋㅋ

 

어제 새벽에 어떤분이 제게 signal에 대해서 질문을 했습니다.

 

void (* signal(int signum, void (* handler)(int)))(int); <<<- 이녀석은 함수 포인터가 아니라 함수(System Call)입니다.

 

저 안에 있는 handler가 함수 포인터(Pointer of Function)이 되는 것인데 ...

질문이 이거였습니다.

 

Process를 5개 띄워놓고, signal을 5개가 쏘는 겁니다.

과연 5개의 handler가 모두 동작할 수 있을까요 ?

 

이분이 질문 하셨던것은 왜 5개가 전부 동작하지 않고, 2 ~ 3개만 동작하느냐 였습니다.

 

이것은 어떻게 보면, 당연한 이야기인데,

OS(Kernel) Level에서는 Scheduler라는 것이 존재해서 특정 Process들에게

특정한 시간 만큼의 Time Slice를 주면서 엄청나게 빠르게 주고 뺏고 주고 뺏고를 반복합니다.

 

바로 Multi-Tasking의 원리가 이것인데요 ...

CPU가 근본적으로 동시에 1가지의 일 밖에 처리할 수 없기 때문입니다.

이것의 성능을 좀 더 끌어올리고자 SMT라는 기술을 도입하게 된것이고,

이 기술로 하여금 부동 소수점 연산과 정수형 연산을 실제로 정말 동시에 처리하게 됩니다(Pipeline 아님)

 

아무튼간 실제로 RT Scheduler라든지 일반 스케쥴러들이 동적 우선순위와 정적 우선순위를 가지고 있습니다.

리눅스에서 컴파일 속도를 높이고자 nice라는 명령어를 주게 되는데요 ... 이것이 바로 동적 우선순위의 예입니다.

nice를 주게 되면 101 ~ 120까지의 동적 우선순위중 가장 빠른 101로 끌어올려서 연산 처리를 빠르게 할 수 있습니다.

 

우선순위가 높을수록 할당되는 Time Slice가 많기 때문이죠 ...

아무튼 위의 문제를 해결하기 위해선 IPC Mechanism의 Lock Mechanism이 필요합니다.

즉, JAVA등의 JSP에서도 C언어가 필요한 이유가 바로 이거였죠 ㅡ_ㅡㅋ

JSP자체에서 JAVA를 끌어다 쓸때 JAVA Beans라는 것을 사용하면 됩니다(그게 그건데 MVC Model을 구성하기 위함임)

 

물론 기본적으로 생각해봐도 Thread라는 것 자체가 Hardware의 자원을 끌어다 쓰는 것이기 때문에 당연히 C와 Assembly Skill이 필요합니다.

아쉽게도 JAVA에서는 Process 생성을 하지 못합니다.

 

이러한 하드웨어, OS 종속적인 Code들이 실제로 필요하기 때문에 Web 개발자일지라도 C가 필요합니다.

가령 이런 것인데요 ... 여러분들도 모두 겪으 셨을 겁니다.

 

강컴들어가셔서 검색창에 입력을 느리게 하면, 자동 인식기능이 활성화 됩니다.

하지만, 타자가 빨라서 빨리 치게 되면, 인식을 전혀 못하지요 ㅡ_ㅡㅋㅋㅋ

바로 이 문제를 C 코드를 연동해줌으로써 해결할 수 있습니다.

 

참고로 JAVA Language는 기본적으로 내부에 C 코드들을 가지고 있습니다.

Network, Thread, 기타 ... 처리를 하기 위해서 반드시 있어야하죠

 

혹여나 자동 완성기능이라든지 대량의 연산이 일어날때 Ajax의 비동기 처리가

완벽하게 일어나지 않는다는 둥하는 문제점을 해결하시고자 한다면, 반드시 JNI와 C언어를 연동해야지 이를 처리할 수 있습니다.

 

그냥 오늘 한 것에 대해서 주절 거려봅니다.

그럼 이만 ~ 도움 되시길 바랍니다.

 

 

 

JAVA Compiler가 황홀하다고 한 이유는 애초부터 이런것들을 다 포함하고 있었기 때문입니다 !!!