G-WAN KV 옵션에서 KV_INCR_KEY
은 첫 번째 필드를 기본 키로 사용합니다.기능 요청 : gwan.h에 포함 된 atomicAdd() 함수
즉,이 기본 색인 작업을 수행하기 위해 G-WAN 코어에 내장되어있는 기본 기능을 증가시키는 기능이 있음을 의미합니다.
gwa.h에 포함 된 서블릿에서 사용할 수 있도록이 함수를 열어 두는 것이 좋습니다.
이렇게하면 ANSI C의 새로운 나에게 도움이 될 것입니다.
G-WAN KV 옵션에서 KV_INCR_KEY
은 첫 번째 필드를 기본 키로 사용합니다.기능 요청 : gwan.h에 포함 된 atomicAdd() 함수
즉,이 기본 색인 작업을 수행하기 위해 G-WAN 코어에 내장되어있는 기본 기능을 증가시키는 기능이 있음을 의미합니다.
gwa.h에 포함 된 서블릿에서 사용할 수 있도록이 함수를 열어 두는 것이 좋습니다.
이렇게하면 ANSI C의 새로운 나에게 도움이 될 것입니다.
Gil의 도움이되는 안내에 감사드립니다.
이제는 혼자서 할 수 있습니다.
다음과 같이 persistence.c의 코드를 변경합니다.
먼저 데이터의 val 정의를 휘도가으로 변경했습니다.
//data[0]->val++;
//xbuf_xcat(reply, "Value: %d", data[0]->val);
int new_count, loops=50000000, time1, time2, time;
time1=getus();
for(int i; i<loops; i++){
new_count = __sync_add_and_fetch(&data[0]->val, 1);
}
time2=getus();
time=loops/(time2-time1);
time=time*1000;
xbuf_xcat(reply, "Value: %d, time: %d incr_ops/msec", new_count, time);
오래된 E2180 CPU와 52,000 incr_operations/msec가 있습니다.
그래서 GCC 컴파일러로 혼자서 할 수 있습니다.
다시 한 번 감사드립니다.
이전 G-WAN 포럼에서 이에 대한 충분한 토론이 있었고 사람들은 플랫폼별로 문서화 된 기능의 풍부한 목록을 만들기 위해 원자력 작업에 대한 경험을 공유하도록 초대되었습니다.
원자 연산은 CPU를 직접 처리하기 때문에 이식 할 수 없습니다. 즉, Intel x86 (32 비트) 및 Intel AMD64 (64 비트)의 코드가 다릅니다. 각 플랫폼 (ARM, Power7, Cell, Motorola 등)에는 고유 한 원자 명령어 세트가 있습니다.
목록 지금까지 기본적인 작업은보다 정교한 작업이 덜 분명하다 (C 확장으로 GCC compiler offers several atomic intrinsics) 쉽게 찾을 수 있지만 있기 때문에 gwan.h
파일에 게시되지 않은 이러한 (asm
기술을 필요로) 그들이 필요로하는 사람들을 구축 할 것 - 코드에서 매우 특정한 용도에 사용됩니다.
소프트웨어 공학은 항상 적은 수의 기능을 사용하는 G-WAN KV 저장소와 같이 가능한 최저 비용으로 제공 할 수있는 것과 실제로 작동하는 방식 간의 균형을 유지합니다. 따르기 간단 함).
원자력 운영에 대해 자세히 알아 보려면 명백한 것 (incr/decr, set/get)을 넘어서 Google을 사용하고 CPU 명령어 세트 설명서를 찾아 용기를 갖고 행동하십시오!
원자 적 연산은 이식 가능하지 않지만 gwan이 내 플랫폼에서 실행할 수있는 경우 gwan의 내부 원자 연산은 내 플랫폼에 맞게 컴파일되었으므로 내 셀브 벳에서도 재사용 할 수 있어야합니다. ** 따라서, gwan.h **에서 수출 된 기능을 요청하는 것은 여전히 합리적입니다. 당신의 설명에 대해 감사합니다. –
. 원자력 작전에 대해 더 많이 배워야한다고 동의하십시오. Gwan은 이미 atomic get/set을 위해 kv 저장소를 제공했습니다. 웹 개발의 경우 정교한 연산을 설계하는 경우는 거의 없으므로 필자는 프로그래머가 아니기 때문에 분명하고 기본적인 원자 증가가 여전히 필요합니다.나는 웹 개발자 다. –
K. K. Lou, 링크 (** "GCC 컴파일러는 몇 가지 aomic intrinsic을 제공합니다."**)를 보아라. 위의 답에서 나는 당신이 기본적인 요구에 필요한 모든 것을 가지고있다. – Gil
무엇이 당신의 질문입니까? C 기반 서블릿에서'KV_INCR_KEY'를 어떻게 사용할 수 있습니까? HTTP에서 – tomlogic
: //gwan.com/api#kv, 열거 KV_OPTIONS { KV_GC_ALLOC = 1, // 가비지 컬렉션, 기본 동작 KV_PERSISTANCE = 2, // 주기적으로 파일 I/O (kv_recfn를 사용하여() 콜 - 뒤로) ** KV_INCR_KEY ** = 4, // 첫 번째 필드 : 기본 키 (자동으로 증가) ...}; –