"When IXM_ENGINE_CONFIG has default thread as 0 all tasks would remain in idle state, infact they won't process."
This is expected, unless you have specific IXM_ENGINE_NODE_CONFIGs with non-zero values.
The idea here is, you might say that "By default, all new nodes that come up will not run this IXM Engine. So I am setting the IXM_ENGINE_CONFIG thread count to zero, and will set a value of 1 or more only on the IXM_ENGINE_NODE_CONFIG entries for the IP addresses where I want the tasks to run"
"When I update IXM_ENGINE_CONFIG with number as 1 then it will execute 3 parallel tasks ( 1 node handling each tasks)."
Yes, this is correct, assuming you have 3 servers and all 3 of those servers have the grid enabled.
When I update IXM_ENGINE_CONFIG with higher number say 4 I see 18-20 tasks getting processed, wanted to know how does it picked up the parallel requests.
Also I see thread counts mentioned in IXM_ENGINE_NODE_CONFIG not been picked up for parallel processing.
IXM_ENGINE_NODE_CONFIG will only be picked up if the IP from the node config matches the configured server ip configured in node.properties on the associated nodes. You should confirm that those match exactly.
I'm not able to understand where you are getting the 18-20 tasks from. You should check the ATTEMPT_NODE column on the GRID_TASKS table to see which IPs are running them.