You're still creating new threads in your loop. Every one of these will get
per-thread data.

Only one thread at a time can enter an isolate anyway -- that's the whole
point of using the locker. It's also the main reason why I don't see why
you would want to have this many threads in a real application.
- If you want to process thousands of events in the same isolate (one after
the other!), just use a fixed-size thread worker pool rather than creating
a new thread for every event. Most likely a single thread will even be
enough for this, unless the workflow consists of a small piece of work in
V8 and a lot of time spent doing or waiting for other things.
- If you want to process several things in parallel, then each thread will
need its own isolate.


On Tue, Dec 16, 2014 at 4:25 AM, Tom Fan <[email protected]> wrote:
>
> At most one thread can run concurrently, but the performance still will
> delay.
>
>
> On Tuesday, December 16, 2014 11:18:36 AM UTC+8, Tom Fan wrote:
>>
>> I modified the test code, it will create and destory thread at loop,
>> thread do very simple thing which construct v8::locker and destruct it. I
>> found a few million cycles, the speed thread of execution slow down
>> absolutely, and the memory consumption continues to increase slowly.
>>
>> #include <pthread.h>
>>
>> #include <v8.h>
>>
>> #include <sys/time.h>
>>
>>
>>
>> double GetTime()
>>
>> {
>>
>>     timeval tv;
>>
>>     gettimeofday(&tv, NULL);
>>
>>     return tv.tv_sec + (double)tv.tv_usec * 0.000001;
>>
>> }
>>
>>
>>
>> v8::Isolate *isolate;
>>
>>
>>
>> class Thread
>>
>> {
>>
>>     public:
>>
>>         static void* Start(void *thread)
>>
>>         {
>>
>>             static_cast<Thread*>(thread)->Start_();
>>
>>         }
>>
>>     private:
>>
>>         void Start_()
>>
>>         {
>>
>>             v8::Locker locker(isolate);
>>
>>         }
>>
>> };
>>
>>
>>
>> void test(pthread_t tid[], Thread thread[])
>>
>> {
>>
>>     for (int i = 0; i < 1; ++i)
>>
>>     {
>>
>>         pthread_create(&tid[i], NULL, Thread::Start, &thread[i]);
>>
>>     }
>>
>>     for (int i = 0; i < 1; ++i)
>>
>>     {
>>
>>         pthread_join(tid[i], NULL);
>>
>>     }
>>
>> }
>>
>>
>>
>> int main(int argc, char* argv[])
>>
>> {
>>
>>     v8::V8::Initialize();
>>
>>     isolate = v8::Isolate::New();
>>
>>     {
>>
>>         pthread_t tid[1024];
>>
>>         Thread thread[1024];
>>
>>         for (long long i = 0; i < 1000 * 1000 * 1000 * 1000llu; ++i)
>>
>>         {
>>
>>             double s = GetTime();
>>
>>             test(tid, thread);
>>
>>             printf("%d. %f\n", i+1, GetTime() - s);
>>
>>         }
>>
>>     }
>>
>>     isolate->Dispose();
>>
>>     v8::V8::Dispose();
>>
>> }
>>
>>
>>
>>
>>
>> <https://lh6.googleusercontent.com/-k9kAjBeeh88/VI-i2rJ8HUI/AAAAAAAAAII/yCVL0N6tsms/s1600/b1.png>
>> <https://lh3.googleusercontent.com/-cUaA-JgmfZw/VI-i8qpxvRI/AAAAAAAAAIY/CGTIkf9xZ0A/s1600/b2.png>
>>
>>
>>
>> <https://lh5.googleusercontent.com/-jYtPKqSoP-o/VI-kLqk3mNI/AAAAAAAAAI4/lG9O689fM2s/s1600/Screenshot%2Bfrom%2B2014-12-16%2B11%3A15%3A42.png>
>>
>>
>> <https://lh4.googleusercontent.com/-BL-Z1QPCNNg/VI-kXfO76LI/AAAAAAAAAJI/QkeeR2kh-OA/s1600/a2.png>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> On Monday, December 15, 2014 8:36:25 PM UTC+8, Jakob Kummerow wrote:
>>>
>>> An isolate has a table with per-thread data, which is implemented as a
>>> linked list and scanned linearly. So yes, when a single isolate has seen
>>> many threads, locking it will become slower. Since there's typically no
>>> reason to access the same isolate with thousands of threads, I wouldn't
>>> consider this a bug.
>>>
>>> On Mon, Dec 15, 2014 at 11:42 AM, <[email protected]> wrote:
>>>>
>>>>
>>>> <https://lh6.googleusercontent.com/-sPNEtxGhqEc/VI6531u4HQI/AAAAAAAAAHw/2rZtAitF4bM/s1600/Screenshot%2Bfrom%2B2014-12-15%2B18%3A10%3A09.png>
>>>> My Os is fedora20, v8 version is v8-3.25.30,
>>>> first loop consumes 0.02 second, and then the 172th's loop consumes
>>>> 2.48second.
>>>>
>>>> #include <pthread.h>
>>>> #include <v8.h>
>>>> #include <sys/time.h>
>>>>
>>>> double GetTime()
>>>> {
>>>>     timeval tv;
>>>>     gettimeofday(&tv, NULL);
>>>>     return tv.tv_sec + (double)tv.tv_usec * 0.000001;
>>>> }
>>>>
>>>> v8::Isolate *isolate;
>>>>
>>>> class Thread
>>>> {
>>>>     public:
>>>>         static void* Start(void *thread)
>>>>         {
>>>>             static_cast<Thread*>(thread)->Start_();
>>>>         }
>>>>     private:
>>>>         void Start_()
>>>>         {
>>>>             v8::Locker locker(isolate);
>>>>             v8::Isolate::Scope scope(isolate);
>>>>         }
>>>>
>>>> };
>>>>
>>>> void test(pthread_t tid[], Thread thread[])
>>>> {
>>>>     for (int i = 0; i < 1024; ++i)
>>>>     {
>>>>         pthread_create(&tid[i], NULL, Thread::Start, &thread[i]);
>>>>     }
>>>>     for (int i = 0; i < 1024; ++i)
>>>>     {
>>>>         pthread_join(tid[i], NULL);
>>>>     }
>>>> }
>>>>
>>>> int main(int argc, char* argv[])
>>>> {
>>>>     v8::V8::Initialize();
>>>>     isolate = v8::Isolate::New();
>>>>     {
>>>>         pthread_t tid[1024];
>>>>         Thread thread[1024];
>>>>         for (int i = 0; i < 1000 * 1000 * 1000; ++i)
>>>>         {
>>>>             double s = GetTime();
>>>>             test(tid, thread);
>>>>             printf("%d. %f\n", i+1, GetTime() - s);
>>>>         }
>>>>     }
>>>>     isolate->Dispose();
>>>>     v8::V8::Dispose();
>>>> }
>>>>
>>>>  --
>>>> --
>>>> v8-dev mailing list
>>>> [email protected]
>>>> http://groups.google.com/group/v8-dev
>>>> ---
>>>> You received this message because you are subscribed to the Google
>>>> Groups "v8-dev" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>  --
> --
> v8-dev mailing list
> [email protected]
> http://groups.google.com/group/v8-dev
> ---
> You received this message because you are subscribed to the Google Groups
> "v8-dev" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
-- 
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- 
You received this message because you are subscribed to the Google Groups 
"v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to