Unless you are using multiple machines, files are probably a better
coordination abstraction than sockets.

(And if you are using multiple machines, you might still want to be
using a file-like abstraction.)

The reason is that sockets give you a "stop and wait" abstraction
while files give you a "named data" abstraction.

Also, modern OS's are pretty good about caching files, not so good
about caching stuff going across sockets.

Thanks,

-- 
Raul

On Thu, Feb 26, 2015 at 11:29 AM, Devon McCormick <devon...@gmail.com> wrote:
> I run parallelized J on multi-core machines and have done so for years.  I
> looked at the "CPU affinity" thing and concluded it was a waste of time and
> an unnecessary constraint for what I was doing.  What I've found is that
> the OS - Windows in my case - does a fine job on its own of distributing
> multiple J sessions across the available cores.
>
> A detailed write-up of what I've done is here:
> http://www.jsoftware.com/jwiki/Community/Conference2012/Talks/ParallelSimulationInJ
> .  An earlier version is here:
> http://www.jsoftware.com/jwiki/DevonMcCormick/ParallelizedJCodeExamples .
>
> The next advance I'd like to come up with would be to spin off multiple J
> processes, then co-ordinate work between them with something like sockets.
> This would allow me to do some simple load-balancing.
>
> On Wed, Feb 25, 2015 at 9:04 PM, Joe Bogner <joebog...@gmail.com> wrote:
>
>> On Wed, Feb 25, 2015 at 5:41 PM, N.N. <nakabi...@gmail.com> wrote:
>>
>> > 1) does Windows use the 8 processors to run the j-console ?
>> >
>>
>> No, J is single threaded
>>
>> 2) is it possible to run 8 j-consoles and assign each console on one
>> > processor ?
>> >
>>
>> You could, but I'm not sure what the benefit would be. You could assign CPU
>> affinity to each process. Each would run independently.
>>
>> 3) is it possible to use 1 console and manually create threads
>> > assigning a process on the 7 remaining processors ?
>> >
>> >
>> J is single threaded and doesn't provide a capability to create threads
>> natively. You can spawn processes so you would need to write your own code
>> to spawn the processes and submit the work to each process. This is
>> conceptually how other single threaded console apps cluster their work
>> (node.js and R)
>>
>> I have done some prototyping on this topic:
>>
>> 1. Integrating tinyc to just-in-time compile multi-threaded C code -
>> http://www.jsoftware.com/pipermail/chat/2015-February/006488.html
>>
>> 2. Integrating go-lang to function as a multi-threaded web server -
>> http://www.jsoftware.com/pipermail/source/2015-February/000663.html
>>
>> 3. Spawning another J process and duplicating the socket to effectively
>> function as a multi-threaded server -
>> http://www.jsoftware.com/pipermail/chat/2013-August/005328.html
>>
>>
>> Still, it would be worthwhile to understand your use-case for threading. My
>> experience has been that threading is most useful when different tasks need
>> to run in parallel. I haven't seen as much benefit in breaking up a single
>> task into chunks and executing it on multiple threads / processes. J's
>> performance has been largely sufficient for single task execution.
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>>
>
>
>
> --
> Devon McCormick, CFA
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to